обновление: если вы установите по крайней мере один точку останова в JavaScript, начало проверки в работах, но без него не работаетMVC 3 Client Validation работает с перебоями
обновление: добавление Jquery тега, так как это может быть связано с проверка плагин
у меня есть MVC 3 версии, System.Web.Mvc
версии продукта: 3.0.20105.0
изменение 5th of Jan 2011
- я думаю, что это последнее.
Я заметил, что проверка клиента не работает, как предполагается в приложении, которое мы создаем, поэтому я сделал быстрый тест.
Я создал базовое приложение MVC 3, используя Интернет-приложение шаблон.
Я добавил контроллер Test:
using System.Web.Mvc;
using MvcApplication3.Models;
namespace MvcApplication3.Controllers
{
public class TestController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Create()
{
Sample model = new Sample();
return View(model);
}
[HttpPost]
public ActionResult Create(Sample model)
{
if(!ModelState.IsValid)
{
return View();
}
return RedirectToAction("Display");
}
public ActionResult Display()
{
Sample model = new Sample();
model.Age = 10;
model.CardNumber = "1324234";
model.Email = "[email protected]";
model.Title = "hahah";
return View(model);
}
}
}
Модель:
using System.ComponentModel.DataAnnotations;
namespace MvcApplication3.Models
{
public class Sample
{
[Required]
public string Title { get; set; }
[Required]
public string Email { get; set; }
[Required]
[Range(4, 120, ErrorMessage = "Oi! Common!")]
public short Age { get; set; }
[Required]
public string CardNumber { get; set; }
}
}
И 3 просмотры:
Создать:
@model MvcApplication3.Models.Sample
@{
ViewBag.Title = "Create";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Create</h2>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
@*@{ Html.EnableClientValidation(); }*@
@using (Html.BeginForm()) {
@Html.ValidationSummary(false)
<fieldset>
<legend>Sample</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Email)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Age)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Age)
@Html.ValidationMessageFor(model => model.Age)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.CardNumber)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.CardNumber)
@Html.ValidationMessageFor(model => model.CardNumber)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
@*<fieldset>
@Html.EditorForModel()
<p>
<input type="submit" value="Create" />
</p>
</fieldset> *@
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
Дисплей:
@model MvcApplication3.Models.Sample
@{
ViewBag.Title = "Display";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Display</h2>
<fieldset>
<legend>Sample</legend>
<div class="display-label">Title</div>
<div class="display-field">@Model.Title</div>
<div class="display-label">Email</div>
<div class="display-field">@Model.Email</div>
<div class="display-label">Age</div>
<div class="display-field">@Model.Age</div>
<div class="display-label">CardNumber</div>
<div class="display-field">@Model.CardNumber</div>
</fieldset>
<p>
@Html.ActionLink("Back to List", "Index")
</p>
индекс:
@{
ViewBag.Title = "Index";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>Index</h2>
<p>
@Html.ActionLink("Create", "Create")
</p>
<p>
@Html.ActionLink("Display", "Display")
</p>
Все по умолчанию здесь - Создать контроллер, AddView от действия контроллера с моделью указана с надлежащим шаблоном подмостей и использование предоставленного макета в образце приложения.
Когда я пойду в /Test/Создание клиента проверки в большинстве случаев работает только для Title
и Age
полей, после нажатия Создать это работает для всех полей (создание не идет к серверу).
Однако в некоторых случаях (после сборки) Title
проверки не работает и Email
есть, или CardNumber
или Title
и CardNumber
но Email
нет. Но никогда не все проверки работают до нажатия Создать.
Я попытался создать форму с Html.EditorForModel
, а также обеспечивать проверку клиента непосредственно перед BeginForm:
@{ Html.EnableClientValidation(); }
Я providing a source code for this sample on dropbox - а может быть, наш DEV окр сломана:/Я сделал тесты на IE 8 и Chrome 10 beta.
Только в случае, в веб конфиге сценарии проверки включены:
<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>
Так что мои вопросы
Есть ли способ, чтобы гарантировать, что проверка клиента будет работать, как это должно работать и не прерывисто?
Является ли это желаемым поведением, и я что-то пропускаю в конфигурации/реализации?
обновление: если вы установите по крайней мере один точку останова в JavaScript, начало проверки в работах, но без него не работает
обновление: добавление Jquery тега, так как это может быть подключен к плагину проверки
это происходит со мной тоже ... любое разрешение на это ?? – cecilphillip