2010-12-12 13 views
1

Ich habe eine Seite mit 2 Formen darauf. Einer von ihnen hat eine Dropdown-Liste darauf:Leere Dropdown-Liste Validierung in asp.net mvc

<form ...> 

<%: Html.DropDownListFor(x => Model.NewForm.FormId, Model.Forms)%> 

<%: Html.ValidationMessageFor(x => Model.NewForm.FormId, "*")%> 

<input type="submit" value="Add" /> 
</form> 

Die NewForm Eigenschaft Modell ist:

public class AddFormViewModel 
{ 
    [Required] 
    [DisplayName("Form Id:")] 
    public int? FormId { get; set; } 
} 

Ich habe bemerkt, dass, wenn der Dropdown-Liste leer ist, die ‚Form‘ Argument ist immer null und ModelState ist immer gültig.

Wenn Dropdown-Liste nicht leer ist, funktioniert alles wie erwartet, "Form" ist nicht null.

Der Wert der Dropdown-Liste wird nicht gesendet, wenn sie leer ist. Dies ist das Standardverhalten, aber wie funktioniert die Validierung?

Einige Ideen:

1) I eine Eigenschaft hinzufügen Modell anzuzeigen, die ein versteckter Eingang auf Seite sein werden, nur Modell Binder Arbeit zu machen;

2) Individuelle Binder Modell

Was sind Ihre Ideen?

+0

Wenn Sie leer sagen, meinen Sie, es gibt keine Optionen in der Auswahlliste oder keine Option ausgewählt wurde? – Paul

+0

Keine Optionen in der Auswahlliste. –

+0

Wenn Sie der Auswahlliste einen Standardwert mit value = "null" text = "Select Option" hinzufügen, bewirkt der Nullwert, dass der standardmäßige ModelBinder die Auswahl trifft. – Paul

Antwort

0

Wie wäre es

[HttpPost] 
public ActionResult AddForm(AddFormViewModel form) 
{ 
    if (form!= null && ModelState.IsValid) 
    { 
     ... save 
    } 
    else 
    { 
     ... show validation error 
    } 

    return ... 
}