我開始了我的第一次嚴重的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; }
}
你確定它的電子郵件?您發佈的代碼似乎並不如此。我的猜測是它最有可能是兩個ID中的一個。如果它們不是可空的,那麼MVC使它們成爲必需。 – br4d
你需要顯示你的POST方法來理解你想做什麼。如果你的表單不包含'Customer.Email'的控件,那麼你的視圖模型是不正確的(參見[什麼是MVC中的ViewModel?](http://stackoverflow.com/questions/11064316/what-is-viewmodel- in-mvc)) –
謝謝Stephen。 Yeap,我意識到我最好不要在ViewModel中使用像Customer這樣的複雜實體。我只是繞過這段時間,並添加了電子郵件編輯的可能性到視圖,它工作正常 - 它實際上是一個我沒有想到的功能:)下一次我會以不同的方式去解決它。 – Turo