2015-06-28 43 views
0

我開始了我的第一次嚴重的MVC項目學校工作可惜沒有首先定義數據註釋模型(所以沒有設置「需要」的註釋,限制屬性名稱等的大小)。我使用視圖模型,添加註釋後,模型導致我的ViewModel狀態在發佈表單時無效。防止使用默認的模型數據註解的視圖模型

好像它的電子郵件要求導致了問題。它沒有用在視圖模型和表單上,看起來viewmodel希望它能得到它。有沒有辦法通過在視圖模型(或控制器)中設置一些限制來停止要求此字段的表單。我真的喜歡不改變應用程序的結構(如果我從從頭開始我可能會做這個有點不同,但沒有太多的時間留給最終確定項目)

客戶(型號)

public Class Customer(){ 
    public int Id { get; set; } 

    [Required(ErrorMessage = "Required")] 
    [StringLength(25, ErrorMessage = "Message"] 
    public string Name { get; set; } 

    public string Logo { get; set; } 

    //[Required(ErrorMessage = "Email required")] 
    //[Display(Name = "E-mail")] 
    //[RegularExpression(xxxx, ErrorMessage = "not correct")] 
    public string Email { get; set; } 

    public int UserId { get; set; } 
} 

視圖模型

public class CustomerEditViewModel 
     { 
     public Customer Customer { get; set; } 

     [FileTypes("jpg,jpeg,png")] 
     [FileSize(1024 * 1024, ErrorMessage = "Max x bytes")] 
     public HttpPostedFileBase File { get; set; } 
     } 
+0

你確定它的電子郵件?您發佈的代碼似乎並不如此。我的猜測是它最有可能是兩個ID中的一個。如果它們不是可空的,那麼MVC使它們成爲必需。 – br4d

+1

你需要顯示你的POST方法來理解你想做什麼。如果你的表單不包含'Customer.Email'的控件,那麼你的視圖模型是不正確的(參見[什麼是MVC中的ViewModel?](http://stackoverflow.com/questions/11064316/what-is-viewmodel- in-mvc)) –

+0

謝謝Stephen。 Yeap,我意識到我最好不要在ViewModel中使用像Customer這樣的複雜實體。我只是繞過這段時間,並添加了電子郵件編輯的可能性到視圖,它工作正常 - 它實際上是一個我沒有想到的功能:)下一次我會以不同的方式去解決它。 – Turo

回答

1

你可以刪除你的控制器,例如,從ModelState中的錯誤

this.ModelState[key].Errors.Clear(); 

,其中關鍵是位清零,因此,如果它的電子郵件是最有可能的 -

this.ModelState["Customer.Email"].Errors.Clear(); 
+0

這個作品,謝謝! – Turo

+0

對不起,我太快了。然後ModelState有效,但TryUpdateModel(vm)不起作用。 – Turo

相關問題