2013-03-26 17 views
8

Trochę zagadki. Mam ViewModel z właściwością Rok:Stan ModelState jest oznaczony jako niepoprawny dla pustego pola niepotrzebnego.

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; } 
} 

Gdybym pisać pusty ViewModel do mojego kontrolera:

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

Potem dostaję jeden błąd z przesłaniem: „jest wymagane Pole Rok . "

Ponieważ nie opatrzono adnotacji pola Rok widoku z atrybutem Required, nie jestem pewien, dlaczego ten błąd jest generowany.

Wszelkie pomysły?

Odpowiedz

13

Moim pierwszym przypuszczeniem jest to, że rzuca wyjątek, że nie ustawiasz roku i jest on zerowy? jeśli zrobiłeś rok Nullable <int> czy nie wyrzuci wymaganej wiadomości?

Wciąż nie spodziewałby się, że jest to konieczne, to strzał w ciemno

+2

Dobra, proszę pana, dokładnie. –

15

ValueTypes domyślnie są domyślnie oznaczone jako Required w MVC. Dokonano tego w celu, w rzeczywistości, ponieważ przez dyincję nie można było odczytywać.

Proponuję ustawić Year jak int?, w przeciwnym razie, jeśli to nie jest poprawna w przypadku, można zmienić na fałszywej

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes

w Global.asax.cs.

+1

potwierdziłeś moje przemyślenia z mojej odpowiedzi powyżej ... +1 dla ciebie :) –

+2

Wartości nie podlegające zerowaniu są WYMAGANE zawsze. Jeśli chcesz mieć niepotrzebną wartość całkowitą, musisz ustawić ją jako zerową. – TheBigCheese

Powiązane problemy