Ajax.BeginForm返回Json的消息

时间:2014-12-05 20:15:14

标签: .net ajax asp.net-mvc unobtrusive-ajax

我正在使用jquery unobtrusive ajax和MVC Ajax.Beginform()来通过C#服务器端验证表单。 我总是用自己替换表单。

一切正常,但我想知道:

让我们说我的表单正在触发"保存到数据库"行动和这个行动成功了。表单中没有错误,因此我不希望将表单发回给客户端,而是在前端触发成功对话框的JSON消息。问题是表单替换总是在发生。当我从服务器上取回json时,如何强制它不要替换我的表单?

我想我要问的是:我怎么能不更新div而只是做一些其他代码?

我知道onSuccess,但是在DIV替换之后被解雇了,我想跳过替换。

2 个答案:

答案 0 :(得分:1)

你应该jQuery ajax发布表单而不是Ajax.Beginform这种功能。 Ajax.BeginForm的意思是发布表单并更新给定目标。如果要返回部分视图或JSON对象,则应使用jQuery执行页面替换和成功对话框触发。

答案 1 :(得分:0)

您可能必须实现自定义替换功能

  • 服务器端:

1)创建一个响应模型,其中包含您的响应状态以及相应的消息

public class ReposnseModel
{
    public bool isSuccess {get; set;}
    public string SuccessMessage {get;set;}
    public string ErrorMessage {get;set;}
}

2)您的表单必须通过部分视图呈现,因此您只能返回其内容

public ActionResult DoWork(Model model)
{

//if success:
...
return Json(new ReposnseModel{isSuccess = true, SuccessMessage = "Success"});

//if lets say model is not valid or some other error:
return PartialView("YourPartialViewForm",model)

}
  • 客户端

使用以下内容注册Ajax.BeginForm onSuccess回调:

  function Callback(data) {
    if (data != null) {
        if (data.isSuccess != undefined) { //means that the data is a serialized ReposnseModel and not a form content
            if (data.isSuccess) {                
                alert(data.SuccessMessage);               
            }else
            {              
                alert(data.ErrorMessage);
            }
        }
        else { //otherwise data is a form content, so it needs to replace the current content  
            $('#formContainer').html(data);
        }
     }
  }