我已经将一个表单动态加载到jquery ui对话框中。现在,我想将客户端验证添加到此对话框中。我试过Scott Gu的博客,效果很好,但不会影响对话框(当我在对话框中使用表单时,不会出现"需要标题"的错误消息),也不会影响我只使用普通Url的情况。我尝试过jquery.validate,其规则和消息类似于jquery模态对话框中Mvc2客户端验证问题的答案?对话框中仍然没有显示任何不同,当我单击提交按钮时,它仍然显示成功。(我确信我对此是正确的)
我可以操作helper类来防止更大的最大长度条目,但它的最小长度和所需的数据字段是我正在努力解决的问题。我已经尝试过使用我能想到的所有java脚本,比如MvcJQueryValidation,但仍然没有。
请帮助任何人感谢
下面是一个如何继续的示例。一如既往,从一个视图模型开始,该模型将表示分部中的表单数据:
public class MyViewModel
{
[Required]
public string Foo { get; set; }
public string Bar { get; set; }
}
然后是一个控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Dialog()
{
return PartialView(new MyViewModel());
}
[HttpPost]
public ActionResult Dialog(MyViewModel model)
{
if (!ModelState.IsValid)
{
return View(model);
}
// TODO: the model is valid => process ...
return Json(new { success = "thanks for submitting" });
}
}
最后是观点。
~/Views/Home/Index.aspx
:
<%@ Page
Language="C#"
MasterPageFile="~/Views/Shared/Site.Master"
Inherits="System.Web.Mvc.ViewPage" %>
<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">
Home Page
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
<script type="text/javascript" src="<%: Url.Content("~/scripts/jquery-1.4.1.js") %>"></script>
<script type="text/javascript" src="<%: Url.Content("~/scripts/jquery-ui-1.8.11.js") %>"></script>
<script type="text/javascript" src="<%: Url.Content("~/scripts/MicrosoftAjax.js") %>"></script>
<script type="text/javascript" src="<%: Url.Content("~/scripts/MicrosoftMvcValidation.js") %>"></script>
<script type="text/javascript">
$(function () {
$('#show').click(function () {
$('#dialog').load(this.href, function (result) {
Sys.Mvc.FormContext._Application_Load();
$('#myForm').submit(function () {
if (!Sys.Mvc.FormContext.getValidationForForm(this).validate('submit').length) {
$.post(this.action, $(this).serialize(), function (data) {
if (data.success) {
alert(data.success);
$('#dialog').dialog('close');
} else {
$('#dialog').html(data);
}
});
}
return false;
});
}).dialog({ autoOpen: true });
return false;
});
});
</script>
<%= Html.ActionLink("Show jquery dialog", "Dialog", null, new { id = "show" })%>
<div id="dialog"></div>
</asp:Content>
最后是部分(~/Views/Home/Dialog.ascx
):
<%@ Control
Language="C#"
Inherits="System.Web.Mvc.ViewUserControl<AppName.Models.MyViewModel>" %>
<% Html.EnableClientValidation(); %>
<% using (Html.BeginForm(null, null, FormMethod.Post, new { id = "myForm" })) { %>
<div>
<%= Html.EditorFor(x => x.Foo)%>
<%= Html.ValidationMessageFor(x => x.Foo) %>
</div>
<div>
<%= Html.EditorFor(x => x.Bar)%>
<%= Html.ValidationMessageFor(x => x.Bar) %>
</div>
<input type="submit" value="OK" />
<% } %>
重要的部分发生在对话框加载后,表单被注入DOM=>您需要使用Sys.Mvc.FormContext.getValidationForForm
方法重新分析验证规则。