2009-07-14 9 views
38

Mi piace scrivere funzioni di convalida nel mio controller che modificano lo ModelState se la convalida non riesce. Per esempio:Qual è il punto del parametro chiave in ModelState.AddModelError in ASP.NET MVC?

private bool ValidateMoney(string raw, string name, decimal min, decimal max) { 
    try { 
     var dec = Convert.ToDecimal(raw); 

     if (dec < min) { 
      throw new ArgumentOutOfRangeException(name + " must be >= " + min); 
     } 
     else if (dec > max) { 
      throw new ArgumentOutOfRangeException(name + " must be <= " + max); 
     } 
    } 
    catch (Exception ex) { 
     ModelState.AddModelError(name, ex.GetUserMessage()); 
    } 
    return ModelState.IsValid; 
} 

Ma, non so mai che cosa mettere per quella stupida argomento "chiave" per ModelState.AddModelError. (Nell'esempio, l'ho appena impostato sul mio nome di visualizzazione dell'interfaccia utente.)

Che cosa stavano pensando gli sviluppatori MVC quando l'hanno aggiunto?

+3

L'argomento chiave non è stupido affatto, forse la documentazione non è così chiara come dovrebbe essere. :) – splattne

risposta

52

La chiave viene utilizzata dall'Help HTML ValidationMessage per conoscere l'esatto messaggio di errore da visualizzare.

Esempio:

<%=Html.TextBox("Name") %> <br /> 
<%=Html.ValidationMessage("Name") %> 

l'aiutante ValidationMessage visualizzerà il messaggio che ha la chiave "Nome" nel dizionario ModelState.

+6

La convalida viene utilizzata in tutti i tipi di applicazioni, non solo nei blog. –

+2

@Frank rispettosamente, la funzionalità non è fantastica? L'errore appare dritto accanto al campo che vuoi! L'ho imparato solo dopo che Google mi ha portato a questa domanda. – gideon

+4

la chiave può essere una stringa vuota, ma non deve essere nulla. Se la chiave è una stringa vuota, può essere vista utilizzando l'helper html Html.ValidationSummary (false) –

9

Il parametro key può essere utilizzato per associare l'errore di convalida a un campo modulo.

Se hai utilizzato @Html.TextBoxFor (o simili) e un @Html.ValidationMessageFor, è possibile ottenere il valore della chiave dal HTML name del campo in fase di convalida (uso Inspect Element).

Se è stato appena utilizzato un codice HTML <input>, è possibile aggiungere un segnaposto di convalida utilizzando @Html.ValidationMessage("AKeyIMadeUp") e visualizzare un messaggio in questo modo: ModelState.AddModelError("AKeyIMadeUp", "The value you entered is no good");.

1

In realtà è possibile impostare qualsiasi messaggio di convalida, mentre il modulo di invio fallito supporti fare un campo nel modello di

[Required] 
    [DataType(DataType.Password)] 
    [Display(Name = "Current password")] 
    public string OldPassword { get; set; } 

e in tutta ModelState ottenuto valida è possibile impostare messaggio di errore si legano con quel campo come come.

ModelState.AddModelError("OldPassword", "Current Password do not match "); 

quindi il messaggio di errore verrà legano con campo in modello denominato "PasswordPrecedente"

Problemi correlati