是jquery.validate.unobtrusive Bugged?

时间:2011-02-28 21:48:16

标签: asp.net-mvc asp.net-mvc-3 unobtrusive-javascript

我正试图在jquery ui对话框中使用ajax请求时使我的clienside验证工作。

这意味着我没有提交按钮,我也没有回复。我无法弄清楚为什么我无法让它发挥作用。

我发布了this question 。我一直在玩它可以得出的结论是,无论出于何种原因,我需要用我的局部视图加载jquery.validate.unobtrusive。这对我没用。

这是一个错误吗?

<小时/> 的修改

我也去了,并在 asp.net codeplex

上发布了错误

这样做的另一个好处是,如果您希望可以下载我的小样本应用程序并进行试用。

<小时/> 或者您可以按照以下步骤操作

  1. 制作一个非空的asp.net mvc 3应用程序(我使用的是razor)

    _Layout.cshtml

                          @ ViewBag.Title                                                                                                      

                <script type="text/javascript">
                    $(function ()
                    {
                        $.get('/home/dialog', null, function (r)
                        {
    
                            var a = $("#dialog").dialog({
                                resizable: false,
                                height: 500,
                                modal: true,
                                buttons: {
                                      "Delete all items": function ()
                                    {
                                        $('#testFrm').validate().form();
                                    },
                                    Cancel: function ()
                                    {
                                        $(this).dialog("close");
                                    }
                                }
                            }).html(r);
                        });
    
                        $('#testFrm').live('submit',function (e)
                        {
                            e.preventDefault();
                        });
    
                    });
    
    
                </script>
            </head>
    
            <body>
                <div class="page">
    
                    <div id="header">
                        <div id="title">
                            <h1>My MVC Application</h1>
                        </div>
    
                        <div id="logindisplay">
                            @Html.Partial("_LogOnPartial")
                        </div>
    
                        <div id="menucontainer">
    
                            <ul id="menu">
                                <li>@Html.ActionLink("Home", "Index", "Home")</li>
                                <li>@Html.ActionLink("About", "About", "Home")</li>
                            </ul>
    
                        </div>
                    </div>
    
                    <div id="main">
                        @RenderBody()
                        <div id="footer">
                        </div>
                    </div>
                </div>
            </body>
            </html>
    

    <小时/> ViewUserControl1(部分视图) - 粘贴在主视图文件夹

    @model MvcApplication1.Models.TestModel

    @using(Html.BeginForm(“test”,“Account”,FormMethod.Post,new {@ id =“testFrm”})) {      @ Html.ValidationSummary()      @ Html.TextBoxFor(x =&gt; x.Name)       }

  2. <小时/> 索引(应存在替换为此)

    @model MvcApplication1.Models.TestModel
    
    
    @{
        ViewBag.Title = "Home Page";
    }
    
    <h2>@ViewBag.Message</h2>
    <p>
        To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
    </p>
    
    @DateTime.Now
    
    <div id="dialog">
    </div>
    

    请注意对话框ID,这将是部分视图的ajax请求存储的位置

    <小时/> 家庭控制器

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    
    namespace MvcApplication1.Controllers
    {
        public class HomeController : Controller
        {
    
            public ActionResult test()
            {
                return null;
            }
    
            public PartialViewResult Dialog()
            {
                return PartialView("ViewUserControl1");
            }
    
    
            public ActionResult Index()
            {
                ViewBag.Message = "Welcome to ASP.NET MVC!";
    
                return View();
            }
    
    
    
    
            public ActionResult About()
            {
                return View();
            }
        }
    }
    

    <小时/> TestModel.cs //查看模型

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.ComponentModel.DataAnnotations;
    
    namespace MvcApplication1.Models
    {
        public class TestModel
        {
            [Required()]
            public string Name { get; set; }
        }
    }
    

    <小时/>     的web.config

     <appSettings>
        <add key="webpages:Enabled" value="false" />
          <add key="ClientValidationEnabled" value="true" />
          <add key="UnobtrusiveJavaScriptEnabled" value="true" />  
      </appSettings>
    

    现在运行该应用程序。点击“删除所有项目”和“提交查询”。

    什么都不应该发生。没有为我弹出验证。

    现在转到将此行添加到部分视图(ViewUserControl1)


    <script src="../../Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>
    
    
    @model MvcApplication1.Models.TestModel
    
    @using (Html.BeginForm("test","Account",FormMethod.Post,new {@id="testFrm"}))
    {
         @Html.ValidationSummary()
         @Html.TextBoxFor(x => x.Name)
         <input type="submit" />
    }
    

    现在再试一次。

    现在应该提出验证错误。

2 个答案:

答案 0 :(得分:0)

我想我找到了某种解决方法。尽管我认为应该采用自动方式来完成一些基本的操作,例如使用部分视图进行验证

Work around

答案 1 :(得分:0)

这不是错误。使用Ajax加载部分视图时,必须解析正在加载的新元素中包含的不显眼的验证属性。

请参阅http://forums.asp.net/t/1651961.aspx/1?Unobtrusive+validation+not+working+on+form+loaded+by+Ajax