1

次の構文を持つ標準の Ajax フォームがあるとします。

  @using(Ajax.BeginForm("AddCityJson", "City",new AjaxOptions
        {
            HttpMethod = "post",
            OnSuccess = "JScriptOnSuccess();",
            OnFailure = "JScriptOnFailure"
        }))
    {
     ...form fields go here...   
     }

都市に関する情報を収集し、送信して保存する単純なフォーム。

コントローラー側で情報を受け取ります。すべてがうまくいった場合は、OnSuccess AjaxOption をトリガーするために true を返し、失敗した場合は false を返します。

public JsonResult AddCityJson(Formcollection collection)
{
 var city = new City
 {
  ...populate city fields from passed in collection
 }
 var cityRepository = new CityRepository;
 city = cityRepository.SaveOrEdit(city);

 if(city==null)
 {return Json(false)} 

 return Json(true);

}

コントローラーの AddCityJson メソッド内で、さまざまなチェックを追加する必要があります。おそらく、都市名が既に存在するかどうか、またはその他の検証を確認し、エラーまたは警告が発生した場合は UI に戻します。

Ajax フォームが ajax true または false を返すことを期待し、その投稿が成功したかどうかを期待している場合、エラー/警告メッセージを UI に渡すにはどうすればよいですか?

ViewData、ViewBags の使用は避けたいと思います。ありがとうございました。

4

1 に答える 1

1

JSON 結果で任意の数の値を返すことができます。次に例を示します。

return Json(new { success = false, message = errorMessage });

そして、これをクライアント側で解釈します。ViewData、ViewBags などを使用する必要はありません。クライアント側で結果をフォーマットするだけなので、JSON 経由でデータを送信するだけです。

編集: Ajax.BeginForm() を使用しているとは知りませんでした。JSON 結果のクライアント側にフックして結果を解析できるはずです。JSON結果でAjax.BeginForm MVCヘルパーを使用する方法を参照してください。.

ほとんどの人は、Ajax.BeginForm を ASP.NET MVC 3 Razor で使用するでの Darin の応答のようなさまざまな StackOverflow の投稿で説明されているように、jQuery を使用して同じことを達成すると思います。jQuery ライブラリは非常に堅牢で、クロスプラットフォームでテストされているため、これもお勧めします。

于 2012-11-01T19:39:03.427 に答える