2013-03-26 17 views
8

Un po 'di mistero. Ho un ViewModel con una proprietà Anno:ModelState è contrassegnato come non valido per un campo vuoto non obbligatorio

[HttpPost] 
public ActionResult Index(TradeSpendingSalesViewModel vm) 
{ 
    var allErrors = ModelState.Values.SelectMany(v => v.Errors); 
    foreach (var e in allErrors) 
    { 
     Response.Write(e.ErrorMessage); 
    } 
} 

tanto sono un singolo errore con un messaggio di:: "Il campo anno è obbligatorio se inserisco un viewmodel vuoto per il mio controller

public class TradeSpendingSalesViewModel 
{  
    public string ProductCode { get; set; } 
    public IEnumerable<SelectListItem> AllowTypeSelect { get; set; } 
    public string AllowType { get; set; } 
    public IEnumerable<SelectListItem> YearsSelect { get; set; } 
    public int Year { get; set; } 
} 

".

Poiché non ho annotato il campo Viewmodel Year con l'attributo Required, non sono chiaro il motivo per cui questo errore viene generato.

Qualche idea?

risposta

13

La mia prima ipotesi sarebbe che si sta generando un'eccezione che non stai impostando anno ed è nulla? se hai reso un anno Nullabile <int> non getta il messaggio richiesto?

io ancora non mi aspetto di essere richiesto, è un salto nel buio

+2

Bang on, signore, esattamente a destra. –

15

ValueTypes di default sono implicitamente contrassegnati come Required in MVC. Questo è stato fatto per lo scopo, in realtà, perché per definizione non sono annullabili.

suggerisco di impostare Year come int?, in caso contrario, se non è corretto nel tuo caso, è possibile modificare a false

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes

in Global.asax.cs.

+1

hai verificato i miei pensieri dalla mia risposta sopra ... +1 per te :) –

+2

I valori non Nullable sono OBBLIGATORI sempre. Se si desidera avere un valore intero non richiesto, è necessario impostarlo come annullabile. – TheBigCheese

Problemi correlati