14

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>
4

3 に答える 3

28

足りないものはありますか?

目立たない ajax スクリプトが不足している可能性があります。

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
于 2012-01-30T15:37:54.543 に答える
0

私が正しいと理解されている場合、あなたはデータをコントローラーに投稿しようとしています。成功した後、ホームページに移動する必要がありますか?そうでない場合は明確にすることができます。だからそれはあなたを助けようとします

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
    }
于 2012-01-30T15:32:49.887 に答える
0

私は同じ種類の問題を抱えていました...すべてのjsファイルをnugetパッケージコンソールで更新しました。

ちょうど私の2セントですが、執筆時点でも、jquery.unobtrusive.ajaxファイルには非推奨のjquery関数「.live」への呼び出しが含まれています(=> jquery 1.9+バージョンから削除されました)jquery live

.onで変更する必要があるのは 4 回ほどあると思いますが、今では正常に動作します ;-)

于 2013-01-31T11:58:22.313 に答える