2016-06-07 66 views
0

我有一個以下問題: 我有一個編輯頁面,它包含一些輸入等 - 沒有什麼不尋常的。在提交按鈕,點擊我要驗證服務器上的形式,並執行下列操作之一:MVC5行動,可以返回查看(模型)或JSON

  1. 回報,如果有錯誤
  2. 返回一些信息模型說這一切都很好

爲什麼?因爲當一切正常時我需要顯示引導模式窗口。所以我做的是(簡化):

[HttpPost] 
public ActionResult EditData(DataViewModel model) 
{ 
    ... 
    if(!ModelState.IsValid) 
     return View(model); 

    return Json(new { success = true, message = "all good" }, JsonRequestBehavior.AllowGet); 
} 

問題是什麼?我張貼的形式與javascript和等待回答這樣的:

{ 
    $(document).on('click', '#submitButton', function() { 
     $.ajax({ 
      dataType: "json", 
      url: "/Controller/EditData", 
      type: "POST", 
      data: $('#submitForm').serialize() 
     }).done(function (data) { 
      console.log(data.success + ' ' + data.message); 
      if (data.success) { 
       $('#modalBody').text(data.message); 
       $('#modal-window-add').modal('show'); 
      } 
     }); 
    }); 
} 

因此,大家可以看到它的顯示模式窗口,但是當一個模型進來它沒有做任何事情在後面儘管迴應來臨,但情況完全沒有發生。

有沒有其他的選擇來解決我的問題?通常我必須在成功編輯和模式關閉時顯示該模式窗口,我需要重定向到另一個頁面 - 這很容易。我嘗試在json中包含模型,但它沒有工作,並且似乎有很多工作要手動檢查所有字段,然後在未通過驗證的輸入下顯示這些紅色錯誤。我和我有經驗的朋友討論過,但他們沒有任何基於MVC的解決方案。任何想法?

最好的問候, 丹尼爾

+0

'console.log(data.success +''+ data.message);'顯示任何東西?記錄'數據'就像'console.log(data);並檢查對象返回什麼 – Tushar

+0

這很有趣,但它永遠不會進入.done函數。這是爲什麼? – Aranha

回答

0

用戶阿賈克斯做工作

@{ 
var ajaxOptions = new AjaxOptions { HttpMethod = "Post", UpdateTargetId = "modal", OnBegin = "onAjaxBegin", OnComplete = "OnAjaxComplete", OnSuccess = "OnAjaxSuccess" }; 
} 

@using (Ajax.BeginForm("Controler", "EditData", ajaxOptions, new { enctype = "multipart/form-data" })) 
{ 
//write html here with model values 
} 

控制器方法

[HttpPost] 
public ActionResult EditData(DataViewModel model) 
{ 
if(!ModelState.IsValid) 
    return View(model); 
} 

的Javascript

function OnAjaxSuccess() 
{ 
show hide model popup 
} 
+0

我還沒有嘗試過,但它看起來不正確,因爲當我返回View(模型)時,您的代碼將調用OnAjaxSuccess函數。我現在怎麼知道控制器是否編輯了數據?只有在一切正常的情況下,我才需要顯示我的模式窗口。或者我錯了?我只能在幾個小時內測試你的代碼,如果我知道它是否有效,我會再次發表評論! – Aranha

+0

使用部分視圖形式您的FOrm –

0

$.ajaxdataType選項(類型,你從服務器期待後面的數據。)

$.ajax功能您添加選項dataType: "json"這意味着你預計json從服務器回來,你只會得到json沒有其他的dataType像xmlhtmltextscript

你的情況要漚甕jsonhtml取決於型號是否有效您可以刪除dateType選項 from $.ajax函數,因爲如果沒有指定,jQuery將嘗試根據響應的MIME類型推斷它(XML MIME類型將產生XML,在1.4中JSON會產生一個JavaScript對象,在1.4腳本中將執行該腳本,其他任何內容都將作爲字符串返回)。