2012-10-27 44 views
0

我想基於另一個下拉列表的選擇填充一個下拉列表。MVC jquery調用控制器方法不起作用

我知道這是一個相當普遍的問題,並且整整兩天,我一直在嘗試不同的樣本,我在網上找到了,無濟於事!

這裏是我的代碼:

控制器:

public List<SelectListItem> listTestCases(string id) 
    { 
     IQueryable<SelectListItem> A = repository.listTestCases(id); 
     return (A.toList()); 
    } 

    public JsonResult listTestCases_2(string id) 
    { 
     IQueryable<SelectListItem> A = repository.listTestCases(id); 
     return Json(A); 
    } 

我有兩種方法,其中之一返回一個列表,另一個JSONResults,我嘗試了一切,我在網上發現了兩個方法。 腳本:

<script> 
$(document).ready(function() { 
    $('select#testCategoriesUniqueId').change(function() { 

     var testCategory = $(this).val(); 
     $.ajaxSetup({ cache: false }); 
     alert(testCategory); 

     $.getJSON("TestInput/listTestCases/" , {id: testCategory}, function(data) { 
      alert("here"); 
     }); 

    }); 
}); 

與上面的代碼,代碼經過了listTestCases,並且得到的結果,但它不會去的成功的功能。 (不提示)

我曾嘗試:

$.getJSON("TestInput/listTestCases/" + testCategory, null, function(data) { 
      alert("here"); 
     }); 

不出意料相同的結果。

我甚至嘗試:(JSON-P)

$.ajax({ 
      url: "TestInput/listTestCases/" + testCategory, 
      dataType: "json-p", 
      success: function(data) { 
       alert(data.length); 
       var S = ""; 
       $("#testCasesUniqueId").removeOption(/./); 
       for (var i = 0; i < data.length; i++) { 
        S += data[i]; 
        var val = data[i].Value; 
        var text = data[i].Text; 
        $("#testCasesUniqueId").addOption(val, text, false); 
       } 
       alert(S); 
      } 
     } 
     ); 

,結果是一個字符串(System.collections.List [... SelectListItem],不給我列表的對象。所以我listTestCases2試了一下,它甚至沒有調用方法。

我讀的地方,我需要使用POST而不是弄的,我甚至試過postJSON,並沒有結果。

基本上我」 m超級迷失。

回答

0

帶我閱讀,我需要使用「POST」方法我的目的。

$.ajax({ 
      url: "TestInput/listTestCases_2/" + testCategory, 
      dataType: "json", 
      type: 'post', 
      success: function(data) { 
       alert(data.length); 

      } 
     }); 

適合我。

0

確保你從web根目錄引用了你的ajax調用(前綴爲'/'的url)。正如所寫的,你正在相對引用該呼叫。我建議不要在jquery/javascript中使用雙引號。另外,不要混合結果類型。假設你的控制器TestInput,嘗試:

$.ajax({ 
     url: '/TestInput/listTestCases_2/' + testCategory, 
     type: 'get', 
     dataType: 'json', 
     success: function(data) { 
      alert(data.length); 
      var S = ''; 
      $('#testCasesUniqueId').removeOption(/./); 
      for (var i = 0; i < data.length; i++) { 
       S += data[i]; 
       var val = data[i].Value; 
       var text = data[i].Text; 
       $('#testCasesUniqueId').addOption(val, text, false); 
      } 
      alert(S); 
     } 
    }); 
+0

它不工作。甚至沒有去成功的一部分。 – Athena

+0

你不應該硬編碼的網址,你不應該硬編碼的URL以'/'開頭。當你這樣做的時候,你認爲網站總是作爲域名的根網站運行,而這往往不是這種情況。即使它在生產中會以這種方式運行,也會限制您在虛擬目錄中站立測試站點的能力 – Zack

0

嘗試通過你的參數testCategory在使用data:設定$.ajax呼叫:

$.ajax({ 
      url: "TestInput/listTestCases", 
      data: { id: testCategory }, 
      dataType: "json", 
      success: function(data) { 
       alert(data.length); 
       var S = ""; 
       $("#testCasesUniqueId").removeOption(/./); 
       for (var i = 0; i < data.length; i++) { 
        S += data[i]; 
        var val = data[i].Value; 
        var text = data[i].Text; 
        $("#testCasesUniqueId").addOption(val, text, false); 
       } 
       alert(S); 
      } 
     } 
     ); 
+0

它不起作用。甚至沒有去成功部分 – Athena

+0

,但是當我使用JSON-P,它給了我字符串((System.collections.List [...SelectListItem])結果(S) – Athena

+0

所以如果你把它改成json-p,你會成功嗎? – ethorn10

相關問題