MVC 4のAjax.BeginFormヘルパーメソッドを使用して、フォームを同期から非同期に変換しようとしています。
私の見解では:
@{
ViewBag.Title = "Users > Edit";
var options = new AjaxOptions()
{
Url = Url.Action("Edit", "User"),
LoadingElementId = "saving",
LoadingElementDuration = 2000,
Confirm = "Are you sure you want to save this User?"
};
}
<div id="saving" style="display:none; color:Red; font-weight: bold">
<p>Saving...</p>
</div>
@using (Ajax.BeginForm(options))
{
@Html.ValidationSummary(true)
<fieldset>
.... FIELDS ...
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
送信ボタンがクリックされると、完全なポストバックが実行されます。私のアクションメソッドは次のようになります。
[HttpPost]
public ActionResult Edit(User user)
{
if (ModelState.IsValid)
{
_repository.Save(user);
TempData["message"] = String.Format("{0} has been saved.", user.Username);
}
return View(user);
}
足りないものはありますか? MVC 4の現在のリリースにはいくつかの問題がありますか?
私のWeb.Configでは、ClientValidationEnabledとUnobtrusiveJavaScriptEnabledをtrueに設定しています。
_Layout.cshtmlでもこれらを指定しています。
<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>
足りないものはありますか?
控えめなajaxスクリプトが欠落している可能性があります。
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
私が正しいと理解されている場合、あなたはデータをコントローラーに投稿しようとしています、成功した後、あなたはホームページに行く必要がありますか?そうでない場合は明確にすることができます。だからそれはあなたを助けようとします
if (ModelState.IsValid)
{
_repository.Save(user);
TempData["message"] = String.Format("{0} has been saved.", user.Username);
return RedirectToAction("yourActionToRedirect"); // after succesfull it will go to the index view
}
同じ種類の問題がありました...すべてのjsファイルをnugetパッケージコンソールで更新しました。
私の2セントだけでなく、執筆時点でも、jquery.unobtrusive.ajaxファイルには非推奨のjquery関数 '。live'への呼び出しが含まれています。 (=> jquery 1.9以降のバージョンから削除されました) jquery live
。onで変更する必要がある4つのオカレンスがあると思いますが、今では正常に機能します;-)