0

我有一个ajax.beginform()这样的:

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

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

可能吗 ?它是怎么做的?

4

2 回答 2

2

去掉 Ajax Beginform 并使用正常形式

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

现在还有一些 javascript 来处理我们的 Ajax Saving

<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。必须使用将处理或显示错误消息的 javascript 函数名称设置 OnFailure 属性。

于 2015-10-13T03:48:11.963 回答