【问题标题】:ASP.NET MVC xVal with Strongly Typed ViewModel具有强类型视图模型的 ASP.NET MVC xVal
【发布时间】:2009-11-17 10:18:00
【问题描述】:

我无法让 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。

感谢您的帮助!

【问题讨论】:

  • “上面的代码不起作用”是什么意思?上面的 ToModel() 函数从何而来?您的模型看起来如何?我需要查看更多信息才能弄清楚这里出了什么问题……

标签: asp.net-mvc validation xval


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    就 Adrian 而言,我们看不到您是否在视图模型上使用了 DataAnnotations,或者您是否使用了 this article 中描述的任何类型的跑步者。您需要使用它提到的 DataAnnotationsValidationRunner 之类的东西来对您使用的验证属性(例如,必需、范围等)指定的视图模型的每个属性执行验证。

    基本上步骤是:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2011-01-01
        • 1970-01-01
        • 2013-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多