Я пытаюсь заставить мою клиентскую проверку работать при использовании ajax-запроса в диалоговом окне пользовательского интерфейса jquery.
Это означает, что у меня нет кнопки отправки и я не отправляю сообщения назад. Я не мог понять, почему я не мог заставить его работать.
Я отправил этот вопрос . Я поэкспериментировал с этим и пришел к выводу, что по какой-то причине мне нужно загрузить jquery.validate.unobtrusive с моим частичным представлением. Это не имеет смысла для меня.
Это ошибка?
<ч />
Редактировать
Я также отправил сообщение об ошибке в asp.net codeplex
Дополнительным преимуществом этого является то, что если вы хотите, вы можете просто загрузить мой маленький пример приложения и попробовать его.
<ч />
Или вы можете выполнить следующие действия
Создать непустое приложение asp.net mvc 3 (я использую бритву)
_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 (частичный вид) - Stick в папке Home View
@ model MvcApplication1.Models.TestModel
@ using (Html.BeginForm ("test", "Account", FormMethod.Post, new {@ id = "testFrm"}))
{
@ Html.ValidationSummary ()
@ Html.TextBoxFor (x => 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>
обратите внимание на идентификатор диалога, в котором будет храниться запрос 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" />
}
Теперь попробуйте еще раз.
Теперь должны появиться ошибки проверки.