我有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
方法:)
有可能吗?怎么做的?
答案 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属性。