わかりました、私はここでウィットエンドに近づいています。ビューモデルを備えたシンプルな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.TextBoxFor()によって生成されているhtmlタグには、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ツールの更新前はうまく機能していました。