2010-10-26 190 views
0

我有一個強類型視圖模型和一個元數據部分類,它具有必需字段和字段類型的註釋屬性。 Create.aspx視圖頁面在提交時會有一個表單在控制器中執行Create方法。當用戶提交沒有輸入所有必填字段的表單時,一旦到達UpdateModel()行,就會拋出異常。但是,沒有顯示註釋字段中指定的錯誤消息。相反,執行循環遍歷RuleViolation()並落在最通用的異常消息中。因此,用戶不知道某些必填字段未被輸入。如果我在RuleVilolation()方法中定義檢查是否爲空的必填字段,那麼它不是DRY。有誰知道爲什麼這些錯誤信息沒有從MetaClass中顯示出來?謝謝。UpdateModel引發異常

///Controller method 
[AcceptVerbs(HttpVerbs.Post)] 
[ValidateInput(false)] 
public ActionResult Create(string id, [Bind(Prefix = "Transfer")]TransferFormViewModel newTransferViewModel, string cancel) 
{ 
    .... 
    if (ModelState.IsValid) 
    { 
     Transfer newTransfer = new Transfer(); 

     if (ModelState.IsValid) 
     { 
     try 
      { 
      Person person = base.ApplicaitonRepository.GetPerson(intID); 
      UpdateModel<Transfer>(newTransfer, "Transfer"); 
      ..... 
      } 
     catch (Exception ex) 
      { 
      newTransfer.MiscException = ex; 
      HelpersLib.ModelStateHelpers.AddModelErrors(this.ModelState, newTransfer.GetRuleViolations()); 
      } 
     } 
    } 
    return View(new TransferFormViewModel(base.ApplicaitonRepository, newTransfer)); 
} 

///partial domain objec class 
[MetadataType(typeof(TransferMetaData))] 
public partial class Transfer 
{ 
    public IEnumerable<RuleViolation> GetRuleViolations() 
    { 
    .... 
    } 
} 

///MetaData class 
class TransferMetaData 
{ 
[Display(Name="List Type")] 
public int ListType { get; set; } 

[Required(ErrorMessage = "Notification Date/Time is required."), Display(Name = "Notification Date/Time")] 
     public DateTime AddedToListDate { get; set; } 

[Required(ErrorMessage="Admit Date/Time is required."), Display(Name="Admit Date/Time")] 
... 
} 
+1

你應該考慮把你的整個代碼段標記爲代碼,因爲像這樣沒有人會閱讀它,因爲它是不可讀的...... – apolka 2010-10-26 07:47:56

回答

0

您是否有<%= Html.ValidationSummary()%>您的視圖中的某處?

您的ModelState中有哪些條目?

+0

是的,我在視圖頁面中有Html.ValidationSummary,但它只是顯示最後一個通用錯誤消息,因爲它是在RuleViolation()中捕獲任何沒有特定違規的最後一個。重點在於,在發佈表單時,必填字段錯誤消息不會顯示在摘要中,而是顯示違規消息。 – user266909 2010-10-27 00:27:04