0

私はajax.beginform()このようなものを持っています:

@using (Ajax.BeginForm("Create_Product", "Admin", new AjaxOptions() { OnFailure = "alert(\"Error !!!\")", HttpMethod = "post"}))
{
//blah blah
}

フォームデータをActionMethodCreate_Productと呼ばれる場所に送信します...この内部ActionMethodで、データを新しい「製品」としてデータベースに保存する前に、try / catch内で、挿入された製品がすでに存在するかどうかを確認します。そして、すでに存在する場合は、ビューに戻り、ajaxフォームのメソッドをトリガー/実行する必要がありますOnFailure:)

出来ますか ?それはどのように行われますか?

4

2 に答える 2

2

Ajax Beginformを削除し、通常のフォームを使用します

@using(Html.Beginform("Create_Product","Admin"))
{
  <input type="text" name="productName" />
  <input type="submit" id="saveNewProduct" />
}

そして今、私たちのAjaxセービングを処理するためのいくつかのJavaScript

<script type="text/javascript">
  $(function(){

       $("#saveNewProduct").click(function(e){
          var item=$(this);
          e.preventDefault();

          $.post("@url.Action("Create_Product","Admin")",
                                item.closest("form").serialize(),function(data){
                if(data.Status=="Exist")
                { 
                   alert("The Product already exist");
                }
                else if(data.Status=="Success")
                {
                  alert("Saved Successfully");   
                }

           });  

       });    
  });

</script>

ActionメソッドJSONが正常に挿入された場合、以下の形式でバックを返します。

{   "Status": "Success"   }

製品がすでに存在する場合、これを返します

{  "Status": "Exist"  }

したがって、Actionメソッドは次のようになります。

[HttpPost]
public ActionResult Create_Product(YourViewModel model)
{
  try
  {
     //check product exist, if yes return the below commented JSON 
     // return Json(new { Status="Exist" });
    //else , Insert the data and Return Succes in JSON
     // return Json(new { Status="Success" });
  }
  catch(Exception ex)
  {
     // log error
    return Json(new { Status="Error" });
  }
}
于 2012-08-24T13:19:51.497 に答える
0

アクションメソッド内で例外を発生させるか、HTTPレスポンスのStatusCodeを設定できます。OnFailureプロパティは、エラーメッセージを処理または表示するjavascript関数名で設定する必要があります。

于 2015-10-13T03:48:11.963 に答える