确保您也叫Sys.Mvc.FormContext._Application_Load();
。
举个例子吧。
查看模型:
public class MyViewModel
{
[Required]
public string Foo { get; set; }
}
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Create()
{
return PartialView(new MyViewModel());
}
[HttpPost]
public ActionResult Create(MyViewModel model)
{
return Content("thanks for submitting");
}
}
视图(Index.cshtml
):
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcValidation.js")" type="text/javascript"></script>
<script type="text/javascript">
$.get('@Url.Action("create")', function (result) {
$('#foo').html(result);
// That's the important bit that you were probably missing
Sys.Mvc.FormContext._Application_Load();
$('form').submit(function() {
if (Sys.Mvc.FormContext.getValidationForForm(this).validate('submit').length > 0) {
return false;
}
});
});
</script>
<div id="foo"></div>
包含被动态加载的形式(Create.cshtml
)部分:
@model MyViewModel
@{Html.EnableClientValidation(true);}
@using (Html.BeginForm())
{
@Html.LabelFor(x => x.Foo)
@Html.EditorFor(x => x.Foo)
@Html.ValidationMessageFor(x => x.Foo)
<button type="submit">OK</button>
}
备注:很显然,只有在您想使用完全过时的Microsoft*.js
脚本而不是推荐的jQuery unobtrusive和jQuery验证插件时,此答案才有效。因此,只有在您的web.config中设置<add key="UnobtrusiveJavaScriptEnabled" value="false"/>
才有效。
因为一些问题我不能打开不显眼的。那么没有它的解决方案是什么? – 2012-01-09 15:37:46
从头开始写你自己的。 – linkerro 2012-01-09 16:19:07