Annotazione dati MVC - Campo obbligatorio non funzionante
-
06-07-2019 - |
Domanda
Ciao, ho il seguente codice in tutta la mia app ma con solo due campi non funziona.
[Required]
public string DevelopmentPM { get; set; }
Il seguente test viene eseguito e superato:
[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);
}
Il mio controller ha il seguente aspetto:
TryUpdateModel(siteConstruction);
if (!ModelState.IsValid)
return View(siteConstruction);
Ho altri campi obbligatori nel modello e sono OK. Questo campo è nullo (ho selezionato) ma non rende il modello non valido, quindi nessuna convalida e un errore durante il salvataggio.
My View
<li>
<label for="DevelopmentPM">
<strong>Development PM:</strong></label>
<%= Html.TextBox("DevelopmentPM") %>
<%= Html.ValidationMessage("DevelopmentPM", "*") %>
</li>
Ho guardato il mio .dbml (da Linq a SQl), l'ortografia sembra ok.
Mi manca qualcosa di semplice - per favore, impazzendo.
Grazie
Davy
Soluzione
[MetadataType (typeof (SiteConstructionMetadata))] sopra la mia classe parziale, l'ho dato per scontato, ce l'avevo lì.
La prossima volta, invece di pubblicare snippet, penso che pubblicherò tutto - smeone wous lo ha notato abbastanza rapidamente.
Davy
Altri suggerimenti
Assicurati di rendere DataAnnotationsModelBinder
anche il raccoglitore di modelli predefinito. Aggiungi quanto segue nel tuo Global.asax.cs
:
ModelBinders.Binders.DefaultBinder = new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder();
e assicurati di aver fatto riferimento all'assembly System.ComponentModel.DataAnnotations.dll
nel tuo progetto. Vedi questo tutorial per maggiori dettagli.