Sys.Mvc.FormContext._Application_Load();
も呼び出されていることを確認してください。
例を考えてみましょう。
ビューモデル:
public class MyViewModel
{
[Required]
public string Foo { get; set; }
}
コントローラー:
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
public ActionResult Create()
{
return PartialView(new MyViewModel());
}
[HttpPost]
public ActionResult Create(MyViewModel model)
{
return Content("thanks for submitting");
}
}
ビュー(Index.cshtml
):
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcValidation.js")" type="text/javascript"></script>
<script type="text/javascript">
$.get('@Url.Action("create")', function (result) {
$('#foo').html(result);
// That's the important bit that you were probably missing
Sys.Mvc.FormContext._Application_Load();
$('form').submit(function() {
if (Sys.Mvc.FormContext.getValidationForForm(this).validate('submit').length > 0) {
return false;
}
});
});
</script>
<div id="foo"></div>
動的にロードされる形態(Create.cshtml
)を含有部分:
を
@model MyViewModel
@{Html.EnableClientValidation(true);}
@using (Html.BeginForm())
{
@Html.LabelFor(x => x.Foo)
@Html.EditorFor(x => x.Foo)
@Html.ValidationMessageFor(x => x.Foo)
<button type="submit">OK</button>
}
備考:明らかに、この回答は、推奨されているjQuery unobtrusiveプラグインとjQuery検証プラグインの代わりに完全に廃止されたMicrosoft*.js
スクリプトを使用する場合にのみ有効です。したがって、web.configに<add key="UnobtrusiveJavaScriptEnabled" value="false"/>
を設定した場合にのみ有効です。
私は邪魔にならないようにいくつかの問題があります。だから、それなしの解決策は何ですか? –
最初から自分で書く – linkerro