2014-12-05 92 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); 
     } 
    } 
    }