2

初めての投稿、お手柔らかにお願いします:)

私はMVC3に比較的慣れておらず、職場でWebアプリケーションを構築しています.

機能のオン/オフを切り替えるチェックボックスを含むページがいくつかあり、それらが変更されると、jQuery Ajax 呼び出しを介して送信し、json の成功/失敗を返してメッセージを表示できるようにします。

送信したばかりの一連のフィールドを持つフォームがいくつかあり (Ajax ではなく)、モデル状態が有効かどうかなどを確認し、そうでない場合はメッセージでフォームを再表示します。代わりに Ajax を使用してこれを行いたいと考えています。

コントローラーに適切に送信される Ajax.BeginForm を使用するフォームがあり、モデルが検証され、エラーがある場合は、UpdateTargetId を使用して置き換えられる部分ビューを返します。

私がやりたいことはこれです...モデルが有効で保存が成功した場合でも、UpdateTargetIdが私のフォームを何があっても置き換えるため、部分ビューを返す必要があります。ある種の「成功」フラグを送り返したいので、「データが保存されました」などのメッセージを表示できます。

OnSuccess は、Ajax 呼び出しが成功した場合に発生し、モデルが有効かどうかは気にしません。

jQuery.Ajax を使用してフォームを送信し、コントローラーで PartialView を返すだけでなく、成功または失敗を返すこともできますか?

「Ajax」Web アプリケーションを構築する際のベスト プラクティスを誰か教えてください。

4

1 に答える 1

3

Ajax.Beginformこれを処理するには、ヘルパー メソッドを使用する代わりにプレーンな JavaScript を使用できます。

@model ProductViewModel
<div id="divForm">
@using(Html.Beginform())
{
  @Html.TextBoxFor(x=>x.Name)
  @Html.TextBoxFor(x=>x.Location)
  <input type="submit" id="btnSave" />
}
</div>
<div id="divItem" />
<script type="text/javascript">
  $(function(){
    $("#btnSave").click(function(e){
         e.preventDefault();   // prevent the default form submit

         var form=$(this).closest("form");
         $.post(form.attr("action"),form.serialize(),function(result){
            if(result.Status=="success")
            {
              //show message and load the new partial view if needed.
              $(#divForm").hide();
              $("#divItem").html(reuslt.ViewHTML);
            }
            else
            {
               alert("Error");
            }
         });
    });
  });
</script>

フォームのサブミットを受け取り、JSON データを返す HttpPost アクション メソッドがあると仮定します。

[HttpPost]
public ActionResult Edit(ProductViewModel model)
{
  // here you may validate the model and save if needed and return JSON back.
  //to do  : return JSON
}

応答 JSON は次の形式である必要があります。

{ "Status" : "success", "ViewHTML" : "<p>This is some markup</p>" }

この回答では、JSON 応答で ViewResult を返す方法について説明しています。

于 2012-10-05T18:28:29.400 に答える