带有强类型ViewModel的ASP.NET MVC xVal

时间:2009-11-17 10:18:01

标签: asp.net-mvc validation xval

我无法让xVal validation使用强类型视图模型。

xVal中的每个方法似乎都需要一个在处理强类型视图模型时不使用的前缀。

我的观点包含与此类似的代码:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<ContactForm>" %>
<%= Html.TextBox("firstName", Model.FirstName) %>

以下代码进入控制器:

try
{
    var theModel = form.ToModel();
    _contactRepository.Save(theModel);
}
catch (RulesException ex)
{
    ex.AddModelStateErrors(ModelState, string.Empty); // Passing string.Empty for prefix, since I don't use prefixes.
}

return View(form);

但是,上面的代码不起作用。我肯定错过了什么,但不知道是什么。这是我第一次使用xVal。

感谢任何帮助!

3 个答案:

答案 0 :(得分:0)

您的帖子不够简洁,我无法弄清楚出了什么问题,但您可以在this blog article的末尾找到一个完整的演示网站。本文还介绍了您需要一步一步完成的所有操作,因此这可以帮助您运行xVal。

答案 1 :(得分:0)

至于Adrian的观点,我们无法看到您是否在视图模型上使用DataAnnotations,或者您是否正在使用this article中描述的任何类型的跑步者。您需要使用类似DataAnnotationsValidationRunner的内容来对视图模型的每个属性执行验证,如您使用的验证属性所指定的那样(例如,必需,范围等)。

基本上步骤是:

  1. 从表单中检索更新的强类型视图模型。
  2. 将该模型传递给DataAnnotationsValidationRunner,收集导致的任何错误
  3. 如果有任何错误(ErrorInfo对象),请将它们作为RulesException
  4. 投掷
  5. 抓住RulesException并使用例外AddModelStateErrors方法
  6. 将验证例外添加到模型中
  7. 检查是否ModelState.IsValid,如果不是,则代表您的视图,由于您的异常处理,现在将错误绑定到您的视图模型。您必须确保适当的ValidationMessage html帮助程序调用,也由链接的文章引用。

答案 2 :(得分:0)

我认为问题在于您不使用前缀。 如果你调试ModelState,你可以看到像“.FirstName”这样的东西的验证,尽管它们应该像“FirstName”。因此,客户端验证摘要和内容不会显示那些验证错误消息。

我认为这是xVal中的一个错误。