如何在确定ActionMethod内部发生错误后运行Ajax.BeginForm的OnFailure方法?

时间:2012-08-24 13:06:21

标签: ajax asp.net-mvc-3

我有ajax.beginform()这样:

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

它将表单数据发送到名为Create_Product的ActionMethod ... 在这个ActionMethod内,在我将数据作为新的“产品”保存到数据库之前, - 在try / catch中 - 我检查插入的产品是否已经存在。如果已经存在,我需要返回视图 AND 触发/运行ajax表单的OnFailure方法:)

有可能吗?怎么做的?

2 个答案:

答案 0 :(得分:2)

删除Ajax Beginform并使用普通表单

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

现在有些javascript来处理我们的Ajax保存

<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" });
  }
}

答案 1 :(得分:0)

您可以在操作方法中引发异常,也可以设置HTTP响应的StatusCode。必须使用将处理或显示错误消息的javascript函数名设置OnFailure属性。