Jquery 对话框客户端验证具有 asp.net mvc2 的"Required!!"字段



我已经将一个表单动态加载到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方法重新分析验证规则。

相关内容

  • 没有找到相关文章

最新更新