MVC3客户端验证:如何防止页面重新加载?
问题描述:
我有页面形式:MVC3客户端验证:如何防止页面重新加载?
@using (Html.BeginForm("Create", "Theme", FormMethod.Post, new { id = "frm_post", enctype = "multipart/form-data" }))
{
@Html.ValidationSummary(true)
@Html.TextBoxFor(model => model.Name)
@Html.ValidationMessageFor(m => m.Name)
<input type="image" src="img.png"
onclick="javascript:if(func()){document.getElementById('frm_post').submit();}else{return false;}"/>
}
我包括脚本页面:
<script src="@Url.Content("~/Scripts/jquery-1.5.2.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
我在web.config中这样的字符串:
<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
我有[必填]为模型中的名称。
但是,当我离开文本框名称为空并提交表单时,错误消息显示几秒钟,然后页面重新加载。我怎样才能停止重新加载页面?
答
O-o-ops ...我只是应该从我的按钮的onclick事件中删除form.submit()。 所以,如果我用
<input type="image" src="img.png"
onclick="javascript:if(!func()){return false;}"/>
它工作正常。
答
它看起来像你可能想要删除该内联onclick处理程序,并考虑编写一个自定义验证程序。这个http://blogs.msdn.com/b/stuartleeks/archive/2011/01/25/asp-net-mvc-3-integrating-with-the-jquery-ui-date-picker-and-adding-a-jquery-validate-date-range-validator.aspx是一个很好的例子,说明如何使用不显眼的验证在MVC3中编写一个。这是一个自定义日期选择器,但同样的原则可以应用于您的自定义验证。
为什么需要在提交按钮上执行onclick事件,在该按钮中手动强制在表单上提交?对我没有意义。这正是不引人注目的验证已经为你做的。 –
是的...这是错误的。我应该从我的按钮的onclick事件中移除form.submit()。所以,如果我使用 '', 它工作正常。 – greatromul
这个onclick处理程序有什么意义?你为什么需要它? –