如何解决具有动态内容的ASP.NET MVC 3客户端验证
| 我已经在我的应用程序中启用了不打扰的客户端验证,并且我已经(类似于)此模型:public class MyModel
{
[Required]
public string Name { get; set; }
[Range(0,100)]
public int? Age { get; set; }
}
我有以下/ Home / Index视图:
@model MyModel
@using (Html.BeginForm(\"Test\",\"Home\"))
{
<div id=\"my-form\">
@Html.Partial(\"Model\")
</div>
<input type=\"submit\" value=\"Go\" />
}
使用部分“模型”:
@model MyModel
<div>
@Html.LabelFor(x => x.Name)
@Html.TextBoxFor(x => x.Name)
@Html.ValidationMessageFor(x => x.Name)
</div>
<div>
@Html.LabelFor(x => x.Age)
@Html.TextBoxFor(x => x.Age)
@Html.ValidationMessageFor(x => x.Age)
</div>
一切都糟透了,我收到了不错的验证错误消息。
现在,我想动态加载表单/部分\“模型\”,即,远程@ Html.Partial并添加以下内容:
<a href=\"#\" id=\"load-form\">Load the form</a>
<script type=\"text/javascript\">
$(function () {
$(\"#load-form\").click(function () {
$.post(
\"/Home/Test\",null,function (result) {
$(\"#my-form\").html(result);
$.validator.unobtrusive.parse($(\"#my-form\"));
},\"html\");
});
});
</script>
/ Home / Test像ѭ4一样简单
但是现在客户端验证不再起作用,如果我查看返回的DOM和HTML,则不会呈现data-attribute,即:
与/ Home / Index中的Html.Partial()
<div>
<label for=\"Name\">Name</label>
<input data-val=\"true\" data-val-required=\"The Name field is required.\" id=\"Name\" name=\"Name\" type=\"text\" value=\"\" />
<span class=\"field-validation-valid\" data-valmsg-for=\"Name\" data-valmsg-replace=\"true\"></span>
</div>
<div>
<label for=\"Age\">Age</label>
<input data-val=\"true\" data-val-number=\"The field Age must be a number.\" data-val-range=\"The field Age must be between 0 and 100.\" data-val-range-max=\"100\" data-val-range-min=\"0\" id=\"Age\" name=\"Age\" type=\"text\" value=\"\" />
<span class=\"field-validation-valid\" data-valmsg-for=\"Age\" data-valmsg-replace=\"true\"></span>
</div>
XHR回应
<div>
<label for=\"Name\">Name</label>
<input id=\"Name\" name=\"Name\" type=\"text\" value=\"\" />
</div>
<div>
<label for=\"Age\">Age</label>
<input id=\"Age\" name=\"Age\" type=\"text\" value=\"\" />
</div>
即使我在局部视图中显式添加了“ 7”和“ 8”,也不会呈现验证内容。
如何使我的AJAX部分呈现验证属性和消息?还是我做错了什么?
解决方法
啊...简单:)
@Html.BeginForm()
必须在同一部分中(我想这很公平,因为我们正在表单上进行验证),因此:
/ Home / Index视图变为:
@model MyModel
<div id=\"my-form\">
@Html.Partial(\"Model\")
</div>
使用部分“模型”:
@model MyModel
@using (Html.BeginForm(\"Test\",\"Home\"))
{
<div>
@Html.LabelFor(x => x.Name)
@Html.TextBoxFor(x => x.Name)
@Html.ValidationMessageFor(x => x.Name)
</div>
<div>
@Html.LabelFor(x => x.Age)
@Html.TextBoxFor(x => x.Age)
@Html.ValidationMessageFor(x => x.Age)
</div>
<input type=\"submit\" value=\"Go\" />
}
,您不需要部分使用表单(例如,对于ajax表单,这有时有时会有所优势,而不必在每次加载时重新绑定为新表单)。
在您的部分中只需添加
{ ViewContext.FormContext = new FormContext()}
属性将被写出。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。