UpdateModel引发异常

时间:2010-10-26 07:14:48

标签: asp.net-mvc

我有一个强类型视图模型和一个MetaData分部类,它在必填字段和字段类型上有注释属性。 Create.aspx视图页面在提交时有一个表单将在控制器中执行Create方法。当用户在没有输入所有必填字段的情况下提交表单时,在到达UpdateModel()行时会引发异常。但是,未显示注释字段中指定的错误消息。相反,执行遍历RuleViolation()并落在最通用的异常消息上。因此,用户不知道没有输入某些必填字段。如果我在RuleVilolation()方法中定义检查是否为空,那么它不是DRY。有谁知道为什么没有从MetaClass显示错误消息?谢谢。

///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 个答案:

答案 0 :(得分:0)

你有&lt;%= Html.ValidationSummary()%&gt;在你看来的某个地方?

您的ModelState中有哪些条目?