【问题标题】:Asp.Net Mvc 3 Client Validation, Attributes generationAsp.Net Mvc 3 客户端验证,属性生成
【发布时间】:2011-10-03 05:06:17
【问题描述】:

Asp.net Mvc3 在输入元素上添加一些自定义属性,例如“data-val-required”,以执行验证。我知道这背后的所有理论,它是如何工作的。

我想知道的是:

当我在“@using (Html.BeginForm())”中创建表单时,它会生成自定义属性,但是当我将表单放在普通的“<form>”标签之间时,它不会创建这些属性。

下面是我创建的一个演示,用于演示我在说什么

Razor 代码,BefingForm() 中的表单

 @using (Html.BeginForm()) {
                @Html.EditorFor(model => model.EmailAddress)
                @Html.ValidationMessageFor(model => model.EmailAddress)
}

生成的 Html 包含如下所示的“data-val-required”属性

<input type="text" value=""  data-val-required="The Email Address field is required."  data-val-email="my message">

纯 Html 标签内的 Razor 代码表单

<form action="/Account/Register" method="post">
            @Html.EditorFor(model => model.EmailAddress)
            @Html.ValidationMessageFor(model => model.EmailAddress)
</form>

生成的 Html 不包含如下所示的“data-val-required”属性

<input type="text" value=""  gtbfieldid="44">

我的问题是我怎么能要求 MVC 添加这些属性,即使表单放在纯 html 标签中

【问题讨论】:

  • 你是否尝试设置 ViewContext 对象的 formcontext 属性

标签: asp.net-mvc asp.net-mvc-3


【解决方案1】:

我相信 BeginForm 方法在内部将一个 formcontext 对象分配给 viewCotnext 的属性 FormContext。如果您不想使用纯 html 表单标签,则必须手动进行,例如

<%
    this.ViewContext.FormContext = new FormContext();
%>

在剃须刀上可能是

@{
    this.ViewContext.FormContext = new FormContext();
}

【讨论】:

    【解决方案2】:

    这里的问题是内部 Html.BeginForm 由 Html.EnableClientValidation() 标记以创建将存储客户端验证元数据的 FormContext。现在,任何呈现验证消息的 HTML 帮助器方法也会在 FormContext 中注册适当的客户端验证元数据。结果就是你使用 helper 得到的结果。但是,如果您尝试使用 HTML 语法而不是帮助程序,则 FormContext 永远不会注册,因此您的验证永远不会添加。

    问候,

    哈士奇

    【讨论】:

      猜你喜欢
      • 2011-10-11
      • 2014-11-03
      • 2020-11-15
      • 1970-01-01
      • 2010-09-14
      • 2014-07-21
      • 1970-01-01
      • 1970-01-01
      • 2013-11-12
      相关资源
      最近更新 更多