Anotación de datos MVC: el campo obligatorio no funciona
-
06-07-2019 - |
Pregunta
Hola, tengo el siguiente bacalao en toda mi aplicación, pero con solo dos campos no funciona.
[Required]
public string DevelopmentPM { get; set; }
La siguiente prueba se ejecuta y pasa:
[TestMethod]
public void SiteConstruction_MODEL_DevelopmentPM_Is_Required()
{
//arrange
var propertyInfo = typeof(SiteConstructionMetadata).GetProperty
("DevelopmentPM");
//act
var attribute = propertyInfo.GetCustomAttributes(typeof(RequiredAttribute),
true).Cast<RequiredAttribute>().FirstOrDefault();
//assert
Assert.IsNotNull(attribute);
}
Mi controlador se ve así:
TryUpdateModel(siteConstruction);
if (!ModelState.IsValid)
return View(siteConstruction);
Tengo otros campos obligatorios en el modelo y están bien. Este campo es nulo (verifiqué) pero no invalida el modelo, por lo que no hay validación y un error al guardar.
Mi vista
<li>
<label for="DevelopmentPM">
<strong>Development PM:</strong></label>
<%= Html.TextBox("DevelopmentPM") %>
<%= Html.ValidationMessage("DevelopmentPM", "*") %>
</li>
He mirado mi .dbml (Linq a SQl), la ortografía se ve bien.
Me estoy perdiendo algo simple, por favor, volviéndome loco.
Gracias
Davy
Solución
[MetadataType (typeof (SiteConstructionMetadata))] por encima de mi clase parcial, lo di por sentado que lo tenía allí.
La próxima vez, en lugar de publicar fragmentos, creo que lo publicaré todo: alguien lo habrá visto muy rápido.
Davy
Otros consejos
Asegúrese de hacer que el DataAnnotationsModelBinder
también sea el archivador del modelo predeterminado. Agregue lo siguiente en su Global.asax.cs
:
ModelBinders.Binders.DefaultBinder = new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder();
y asegúrese de haber hecho referencia al ensamblado System.ComponentModel.DataAnnotations.dll
en su proyecto. Consulte este tutorial para obtener más detalles.