2014-12-05 89 views
0

我正在使用jquery unobtrusive ajax和MVC Ajax.Beginform()来验证通过C#服务器端的窗体。 我总是用自己替换表单。Ajax.BeginForm返回Json的消息

这是所有工作正常,但我想知道:

比方说,我的形式引发了“保存到数据库”行动,这次行动取得了成功。在表单中没有错误,所以我不想将表单发送回客户端,而是在前端触发成功对话框的JSON消息。问题在于表单替换总是在发生。当我从服务器获得json时,我怎么能强制它不取代我的表单?

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

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

+0

演出便代码:) – 2014-12-05 20:18:13

+0

我可以的,如果你真的需要它,但它的所有加工。我没有问题,但只是一个问题:-) – PoeHaH 2014-12-05 20:19:30

回答

1

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

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