2011-09-05 122 views
1

我幾乎整天都在看這個問題,我不知道爲什麼它不工作。我有以下的控制器動作

public JsonResult GetSubCategory(int category) { 
      //var subCat = db.categories.Where(c => c.parentID == category).Select(c => new {c.ID, c.codeDesc}).ToList(); 
      var subCat = from c in db.categories 
         where c.parentID == category 
         select new 
         { 
          ID = c.ID, 
          codeDesc = c.codeDesc 
         }; 

      return Json(subCat); 
} 

我在查看文件

$("#catList").change(function() { 
    alert("In the change event. cat val is " + $("#catList").val()); 
    var category = $("#catList").val() 
    $.getJSON("/Issues/Search/GetSubCategory", { 'category': category }, 
     function (data) { 
      alert("in the func"); 
      $("#subCatList").options.length = 0; 
      $(data).each(function() { 
       $("<option>").val(this.ID).text(this.codeDesc).appendTo("#subCatList"); 
      }); 
     }); 
}); 

以下jQuery的方法至少,我只是想顯示警告信息,但它似乎沒有不被顯示。我已經嘗試了兩種構建subCat對象的方法,就像你在上面的控制器代碼中看到的一樣。調試顯示數據正在使用ID和codeDesc字段和值生成,但View端沒有任何事情發生。請有人幫忙弄清楚我做錯了什麼?

謝謝

+1

Sods law !!!!在發佈此消息後2秒,我發現在發回Json數據時必須使用POST的信息。所以我改變了上面的調用以使用.ajax()類型設置爲POST,它的工作。呼! – SimpleUser

+4

你可以回答你自己的問題,並接受答案(等待一段時間後),所以這個問題可以認爲是治療 – JMax

+2

很高興它被排序 - 但你實際上不必使用POST。您可以允許使用GET請求調用JsonResult:'return Json(subcat,JsonRequestBehavior.AllowGet)' –

回答

0

如果警報沒有發生,這意味着JSON調用失敗。嘗試添加JSON通話結束後,執行以下操作:

.error(function() { 
    alert("JSON call failed"); 
}); 

如果收到警報後,下一步就是確定爲什麼JSON電話不能正常工作。

0

可能應該在視圖文件的第3行的末尾添加一個分號。

0

,在響應GET請求返回JSON數據的任何行動的結果必須有:

JsonRequestBehavior.AllowGet 

在它的return語句。這是在MS實施中慎重考慮的,通過發送虛假數據來避免與Json相關的攻擊。

所以你的情況:

return Json(subCat,JsonRequestBehavior.AllowGet); 

將解決你的問題。

在附註中,會導致這種情況的另一件事是,如果您沒有返回正確的MIME類型,但這通常只適用於您的手編碼結果處理程序而不是使用MVC。

我的意思是,如果你說你準備好返回HTML(並且服務器返回「Content-type:text/html」),那麼你尋找Json的Ajax請求將以同樣的方式默默地失敗,除非您將響應類型設置爲「application/json」

0

其他建議可能問題在於您在列中出現錯誤。如果看到「錯誤」的問題是,呼叫不成功

0

謝謝您的幫助的迴應,你可以嘗試使用

$.ajax({ 
    url: "/Issues/Search/GetSubCategory", 
    data: { 'category': category }, 
    success: function (data) { 
      alert("in the func"); 
      $("#subCatList").options.length = 0; 
      $(data).each(function() { 
       $("<option>").val(this.ID).text(this.codeDesc).appendTo("#subCatList"); 
      });, 
    error: function(){ 
      alert('error'); 
     }, 
    dataType: "json" 
}); 

。正如我在上面的評論中所述,這是因爲我沒有使用POST選項來調用它。
也正如Jonathon和Shawty所說的,你也可以表明你想要一個GET來返回結果,但是從我讀到的這個不被認爲是安全的。 (如果你當然不認爲這是真的,我想聽聽你的意見)。

謝謝