Pra*_*sad 9 asp.net-mvc asp.net-mvc-3
Asp.net Mvc3在输入元素上广告一些自定义属性,如"data-val-required",以执行验证.我知道这背后的所有理论,它是如何运作的.
我想知道的是:
当我在"@using(Html.BeginForm())"中创建我的表单时,它会生成自定义属性,但是当我将表单放在普通" <form>"标签之间时,它不会创建这些属性.
下面是我创建的演示,用于演示我所说的内容
剃刀代码,BefingForm内部的形式()
@using (Html.BeginForm()) {
@Html.EditorFor(model => model.EmailAddress)
@Html.ValidationMessageFor(model => model.EmailAddress)
}
Run Code Online (Sandbox Code Playgroud)
生成的Html包含"data-val-required"作为如下所示的属性
<input type="text" value="" data-val-required="The Email Address field is required." data-val-email="my message">
Run Code Online (Sandbox Code Playgroud)
纯粹Html标签内的剃刀代码表
<form action="/Account/Register" method="post">
@Html.EditorFor(model => model.EmailAddress)
@Html.ValidationMessageFor(model => model.EmailAddress)
</form>
Run Code Online (Sandbox Code Playgroud)
生成的Html不包含如下所示的"data-val-required"属性
<input type="text" value="" gtbfieldid="44">
Run Code Online (Sandbox Code Playgroud)
我的问题是我怎么能要求MVC添加这些属性,即使表单放在侧面的纯html标签中
我相信BeginForm方法在内部将一个formcontext对象分配给viewCotnext的属性FormContext.如果您不想使用普通的html表单标签,则必须手动执行
<%
this.ViewContext.FormContext = new FormContext();
%>
Run Code Online (Sandbox Code Playgroud)
它可能是剃须刀
@{
this.ViewContext.FormContext = new FormContext();
}
Run Code Online (Sandbox Code Playgroud)
这里的问题是内部Html.BeginForm由Html.EnableClientValidation()标记,以创建将存储客户端验证元数据的FormContext.现在,任何呈现验证消息的HTML帮助器方法也会在FormContext中注册适当的客户端验证元数据.结果就是你使用帮助器时得到的结果.但是,如果您尝试使用HTML语法而不是帮助程序,则永远不会注册FormContext,因此永远不会添加您的验证.
问候,
Huske
| 归档时间: |
|
| 查看次数: |
2010 次 |
| 最近记录: |