Хорошо, я почти сошел с ума.У меня есть простое приложение MVC3 с моделью представления
ViewModel
public class TicketViewModel {
public Ticket Ticket { get; set; }
[DisplayName("Name")]
[Required(ErrorMessage = "Requestor's name is required.")]
public string Name { get; set; } }
Контроллер
[HttpPost]
public ActionResult Create(TicketViewModel vm)
{
if(ModelState.IsValid) {
TempData["message"] = "Your ticket has been submitted.";
TempData["message-class"] = "success";
return RedirectToAction("Index");
}
TempData["message-class"] = "error";
return View("Index", vm);
}
Дляпо какой-то причине ModelState.IsValid постоянно отображается как true .Даже когда имя оставлено пустым.Это как модель / модель представления вообще не проверяется.Это работает на других приложениях, так что я уверен, что не подключаю что-то.Я включил в себя весь валидационный javascript, хотя я не думаю, что сейчас это проблема.
Обновление Интересно, что теги html генерируются @Html.TextBoxFor () НЕ включает атрибуты data-val и data-val-required.
Просмотр
@model MyApp.ViewModels.TicketViewModel
@{
ViewBag.Title = "Tickets";
}
<div id="main-content">
<section class="large">
<div class="section">
<div class="section-header">Submit Ticket</div>
<div class="section-content">
<div class="message"></div>
@using( Html.BeginForm("Create", "Home", FormMethod.Post) ) {
<h2>User Information</h2>
<dl>
<dt>@Html.LabelFor( m => m.Name)</dt>
<dd>
@Html.TextBoxFor( m => m.Name)
@Html.ValidationMessageFor( m => m.Name)
</dd>
<dt></dt>
<dd><button>Submit</button></dd>
</dl>
}
</div>
</div>
</section>
</div>
ОБНОВЛЕНИЕ II
Ну, теперь это интересно.Я создал новое приложение и получил работу с основным кодом.Затем, когда я добавил DI-код в global.asax.cs, проверки перестали работать.В частности, когда я добавляю
public void SetupDependencyInjection() {
_kernel = new StandardKernel();
RegisterServices(_kernel);
DependencyResolver.SetResolver(new NinjectDependencyResolver(_kernel));
}
и вызываю его из Application_Start ()
protected void Application_Start()
{
SetupDependencyInjection();
AreaRegistration.RegisterAllAreas();
RegisterGlobalFilters(GlobalFilters.Filters);
RegisterRoutes(RouteTable.Routes);
}
, если я удаляю, валидации SetupDependencyInjection () начинают работать.Чтобы было ясно, DI работает хорошо, но, кажется, убивает проверки.Это хорошо работало до обновления инструментов MVC3.