アップデート2:
jQueryバージョンの互換性の問題。
アップデート1:
スクリプトリファレンスにタイプミスがありました。しかし、私は今この問題に遭遇します:
TypeError: $(...).live is not a function
$("a[data-ajax=true]").live("click", function (evt) {
=====================================
コントローラーでajax.beginformを介して有効なフォームを送信すると、コールバック関数によって処理される代わりにビューに表示されるJSONが返され、その理由がわかりません。
誰かに馴染みがあるように見える場合に備えて、ネットからデモプロジェクトを取りました。
HTML / JS
@model Unobtrusive_Validation.Models.BlogPost
<html>
<head>
</head>
<body>
<script src="~/Scripts/jquery-1.9.1.js"></script>
<script src="~/Scripts/jquery.validate.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.js"></script>
<script src="~/Scripts/jquery.unobtrusive.ajax.js"></script>
@using (Ajax.BeginForm("Test", "BlogPost",
new AjaxOptions{
HttpMethod = "POST",
OnSuccess = "OnSuccess",
OnBegin = "alert('OnBegin')",
OnComplete = "alert('OnComplete')",
OnFailure = "alert('OnFailure')"
} )
)
{
@Html.ValidationSummary(true)
<fieldset>
<legend>BlogPost</legend>
<div class="editor-label">
@Html.LabelFor(model => model.PostedOn)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.PostedOn)
@Html.ValidationMessageFor(model => model.PostedOn)
</div>
<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.Content)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Content)
@Html.ValidationMessageFor(model => model.Content)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Category)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Category)
@Html.ValidationMessageFor(model => model.Category)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
</body>
<script type='text/javascript'>
function OnSuccess(result) {
console.log(result);
if (result.success == false) {
alert("failed");
}
}
</script>
</html>
コントローラ:
public class BlogPostController : Controller
{
// GET: /BlogPost/Create
public ActionResult Create()
{
return View();
}
[HttpPost]
public ActionResult Test(BlogPost _model)
{
return Json(new {success = false} );
}
}
Web.config
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />