2013-03-26 23 views
8

Một chút bí ẩn. Tôi có một viewmodel với một tài sản Năm:ModelState được đánh dấu không hợp lệ đối với trường trống không bắt buộc

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

Nếu tôi đăng một viewmodel trống để điều khiển của tôi:

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

Sau đó, tôi nhận được một lỗi duy nhất với một thông điệp: "Trường Năm là cần thiết . "

Vì tôi chưa chú giải trường Trường mô hình xem với thuộc tính Required, tôi không rõ lý do lỗi này được tạo.

Bất kỳ ý tưởng nào?

Trả lời

13

phỏng đoán đầu tiên của tôi là nó sẽ ném một ngoại lệ mà bạn không đặt năm và không có giá trị? nếu bạn thực hiện năm Nullable <int> thì nó có không ném thông điệp được yêu cầu không?

tôi vẫn sẽ không mong đợi nó được yêu cầu, đó là một shot trong bóng tối

+2

Bang, thưa ông, chính xác. –

15

ValueTypes theo mặc định được ngầm đánh dấu là Required trong MVC. Điều này đã được thực hiện cho mục đích, thực sự, bởi vì chúng bởi difinition là không nullable.

Tôi đề nghị bạn thiết lập Year như int?, nếu không, nếu nó không đúng trong trường hợp của bạn, bạn có thể thay đổi false

DataAnnotationsModelValidatorProvider.AddImplicitRequiredAttributeForValueTypes

trong Global.asax.cs.

+1

bạn đã xác minh suy nghĩ của tôi từ câu trả lời của tôi ở trên ... +1 cho bạn :) –

+2

Giá trị không phải trả tiền luôn được yêu cầu. Nếu bạn muốn có một giá trị Integer không cần thiết, bạn phải đặt nó là nullable. – TheBigCheese

Các vấn đề liên quan