2011-09-29 13 views
9

Qualche idea sul perché il seguente elenco a discesa non verrà convalidato con il campo richiesto come tipo int (il campo "Titolo" sotto)?MVC3 DropDownList non convalida con il campo di classe [Required] come tipo int?

[Required]    // This works! 
    [Display(Name = "Name")] 
    public string Name { get; set; } 

    [Required]    // This doesn't work 
    [Display(Name = "Title")] 
    public int TitleId { get; set; } 



    <div class="editor-label"> 
     @Html.LabelFor(model => model.Name, "Name") 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Name) 
     @Html.ValidationMessageFor(model => model.Name, "This can't be blank!") 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.TitleId, "Title") 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownListFor(model => model.TitleId, (SelectList)ViewBag.TitleId, String.Empty) 
     @Html.ValidationMessageFor(model => model.TitleId) 
    </div> 

enter image description here

+0

Quando pubblichi i dati, si fa TitleId hanno un valore assegnato? –

+0

Se int? continua a non funzionare, forse imposti un valore predefinito per il tuo menu a discesa? es .: (0, "tutti i record") invece di un valore nullo? – Iridio

+0

No go ... L'ho impostato su "-Seleziona-" e sfortunatamente non ha funzionato. – JaJ

risposta

21

Secondo this work item, lato client pause di convalida quando l'SelectList nel ViewBag utilizza lo stesso nome come il settore in questione. (Cioè entrambi sono TitleId nel tuo caso.)

Prova questa:

@Html.DropDownListFor(model => 
    model.TitleId, (SelectList)ViewBag.TitleIdList, String.Empty) 

con il SelectList rinominato TitleIdList conseguenza.

+0

$$$$$ Grazie per il post! Era così! – JaJ

3

[Required] funziona solo per gli oggetti Null e int non può essere annullabile. Provate ad usare int? invece di int

+0

No go! Questo è bizzarro. Quello che mi sconcerta è che ho un altro DropDownList che è nullable di tipo int: [Obbligatorio] [Display (Name = "ID ordine")] pubblico Nullable OrderId {get; impostato; } E la convalida la cattura se è vuota ("OrderId"). Ma quel valore ("OrderId") è annullabile nel mio modello di associazione oggetto (il database) mentre il "Titolo" non è annullabile nel database. Questa è l'unica differenza, a meno che non debba generare una nuova vista da quando ho cambiato quel tipo in int ?. Qualche altro pensiero? – JaJ

+0

Forse puoi usare [Attributo min dall'estensione annotazioni dati] (http://dataannotationsextensions.org/Min/Create)? – Panos

1

Oppure provare con questo. Aggiungere il codice qui sotto nel file site.css

select.input-validation-error { 
    /*border: 1px solid #e80c4d;*/ 
    /*Other styles*/ 
} 

Questo mostrerà la discesa colore del bordo, come rosso, quando è vuoto.

E Visualizza pagina:

@Html.DropDownListFor(model => model.TitleID, Model.TitleIDList, "-- Select --", new { @class = "dropdownlist" }) @Html.ValidationMessageFor(model => model.TitleID, "This can't be blank") 
Problemi correlati