He utilizado un patrón de modelos de vista compuesta para algunos de los formularios de este proyecto. Funciona muy bien.Vista compuesta Objeto del modelo que causa un error de validación remota
En este caso tengo un modelo de vista VendorAddress. Utilizo Address (es) en algunos lugares en este proyecto, así que hice y Address view model object que puedo volver a usar. Luego decidí que quería hacer una comprobación minuciosa de los códigos de estado y las cremalleras, por lo que deseé intentar usar la validación remota y verificar el estado y el código postal de un conjunto almacenado de tablas en la base de datos.
El problema es que no recupero los valores de los métodos de acción remota para los campos que estoy solicitando (en este caso, estado y código postal). Creo que esto se debe al nombre que mangleing que el marco MVC hace para compuestos o subtipos para id (s) para las entradas en este caso está haciendo nombres como 'Address_Line1' y 'Address_State' y 'Address_PostalCode'.
En última instancia, la pregunta que tengo es, ¿hay alguna manera de desactivar la 'Dirección_' pre-rellenada desde el objeto de modelo de vista base de manera que MVC framework pueda ponerlo en el objeto después de la publicación del formulario ?
public class AddressViewModel
{
[ScaffoldColumn(false)]
public int AddressId { get; set; }
[Required(ErrorMessage = "Please enter the first address line")]
public string Line1 { get; set; }
public string Line2 { get; set; }
public string Line3 { get; set; }
[Required(ErrorMessage = "Please enter a city name")]
public string City { get; set; }
[Required(ErrorMessage = "Please enter a state 2 letter code")]
[StringLength(2)]
[Remote("CheckState", "Validation", AdditionalFields = "PostalCode")]
public string State { get; set; }
[Required(ErrorMessage = "Please enter a postal code")]
[Remote("CheckZip", "Validation", AdditionalFields = "State")]
[Display(Name = "Zip/Postal Code")]
public string PostalCode { get; set; }
public string Country { get; set; }
}
public class VendorContactViewModel
{
public int VedorContactId { get; set; }
public int ContactVendorId { get; set; }
public int ContactId { get; set; }
[Required]
[Display(Name = "Contact Type")]
public byte ContactTypeId { get; set; }
public string ContactType { get; set; }
[Required]
[Display(Name = "Contact Info")]
public string ContactInfo { get; set; }
[Display(Name = "Contact Label")]
public string ContactLabel { get; set; }
public IEnumerable<SelectListItem> ContactTypes { get; set; }
}
entonces en forma después de la prestación que tiene este aspecto:
<input type="text" value="" size="2" name="Address.State" maxlength="2" id="Address_State"
data-val-required="Please enter a state 2 letter code" data-val-remote-url="/Validation/CheckState"
data-val-remote-additionalfields="*.State,*.PostalCode" data-val-remote="&#39;State&#39; is invalid."
data-val-length-max="2" data-val-length="The field State must be a string with a maximum length of 2."
data-val="true" class="input-validation-error">
me sale la llamada remota, pero no hay nada en los parámetros de "Estado" y "PostalCode", por lo que las rutinas discretas son disparando, pero creo que no sabe dónde buscar los datos, aunque escribí algo en los campos propicios. Como se puede ver en el código dictada el id = "Address_State" y el-val-remote-additionalfields de datos = ".State, .PostalCode"
Gracias por su tiempo y esfuerzo,
Irv
Gracias Darin, lo he descubierto pero esta es básicamente la respuesta correcta. Aunque realmente necesitas la propiedad en el enlace también, como [Enlazar (Prefijo = "Dirección.Estado")] cadena Estado ..... –
Gracias Darin ... Eres increíble ... :) –