我正试图在jquery ui对话框中使用ajax请求时使我的clienside验证工作。
这意味着我没有提交按钮,我也没有回复。我无法弄清楚为什么我无法让它发挥作用。
我发布了this question 。我一直在玩它可以得出的结论是,无论出于何种原因,我需要用我的局部视图加载jquery.validate.unobtrusive。这对我没用。
这是一个错误吗?
<小时/> 的修改
我也去了,并在 asp.net codeplex
上发布了错误这样做的另一个好处是,如果您希望可以下载我的小样本应用程序并进行试用。
<小时/> 或者您可以按照以下步骤操作
制作一个非空的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) }
<小时/> 索引(应存在替换为此)
@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" />
}
现在再试一次。
现在应该提出验证错误。
答案 0 :(得分:0)
我想我找到了某种解决方法。尽管我认为应该采用自动方式来完成一些基本的操作,例如使用部分视图进行验证
答案 1 :(得分:0)
这不是错误。使用Ajax加载部分视图时,必须解析正在加载的新元素中包含的不显眼的验证属性。
请参阅http://forums.asp.net/t/1651961.aspx/1?Unobtrusive+validation+not+working+on+form+loaded+by+Ajax