从Asp.net MVC 2迁移到3之后的ModelStateError ArrayTypeMismatchException

时间:2011-02-02 13:38:49

标签: validation asp.net-mvc-3

以下代码在MVC 2中运行良好,但在迁移到MVC 3之后,在执行方法modelState.AddModelError

时会抛出类型ArrayTypeMismatchException的异常
public static void CopyTo(this RulesException ruleException, ModelStateDictionary modelState)
{
  foreach (var propertyError in ruleException.Errors)
  {
    string key = ExpressionHelper.GetExpressionText(propertyError.Property);
    var message = propertyError.Message;        
    modelState.AddModelError(key, message );        
  }
}

这是在视图未验证后执行的扩展方法。这是这样称呼

[HttpPost, Authorize]
public ActionResult Create(Entity entity)
{
  try
  {
       //..... perform creation of entity
  }
  catch (RulesException ex)
  {
    ex.CopyTo(Controller.ModelState);
  }

  return View(entity);
}

有什么想法吗?谢谢

斯特凡诺

1 个答案:

答案 0 :(得分:1)

我遇到了类似扩展的同样问题。 检查与帮助程序的项目是否引用System.Web.MVC 3.0.0.0而不是2.0.0.0。 要仔细检查只是在CopyTo函数中将参数“ModelStateDictionary”更改为“object”,您应该得到正确的错误消息(参考中的错误)。 希望它有所帮助