2009-02-11 59 views
6

我想從一個文本框的一些文本傳遞給控制器​​,以獲得JSON結果像這樣的jQuery的getJSON沒有傳遞任何值,控制器

function invokeAction() { 
     var searchText = $("#SearchTextBox").val(); 

     // Invoke MVC controller action 
     $.getJSON("/Home/Results/" + searchText, bindResults); 
    } 

如果我把警報在這裏我可以看到SEARCHTEXT肯定有一個值,但是當我把一個破發點上此控制器操作:

public ActionResult Results(string search) 
    { 
     var r = from t in db.Restaurants 
       where SqlMethods.Like(t.Name, "%" + search + "%") || SqlMethods.Like(t.Postcode, search + "%") || SqlMethods.Like(t.CuisineType.Type, search + "%") 
       orderby t.Name ascending 
       orderby t.Rating descending 
       orderby t.NumOfViews 
        descending 
       select t; 

     return Json(r.ToList()); 
    } 

傳入的字符串爲空,但是當我在調試器檢查HTTP上下文我SEARCHTEXT是URL的一部分。

因爲這是空查詢返回沒有結果。

我在這裏錯過了什麼嗎?

回答

9

我從服務返回json時遇到了一些問題,我沒有收到任何回電。事實證明,JSON格式不正確,我可以通過處理plain ajax調用的錯誤選項來測試並獲取這些錯誤。

$.ajax({ 
    type: "GET", 
    url: "Home/Results/", 
    data: { search: searchText }, 
    dataType: "json", 
    error: function(xhr, status, error) { 
    // you may need to handle me if the json is invalid 
    // this is the ajax object 
    }, 
    success: function(json){ 
    alert("Data Returned: " + json); 
    } 
}); 
2

你將不得不解決您的路線和替換{ID} {與搜索}爲了得到它綁定到正確的參數 - 嘗試這樣的事:

routes.MapRoute("search", "Home/Results/{search}", 
    new { controller = "Home", action = "Results" }); 

如果你不想要做到這一點,可以通過將參數名指定爲標準查詢字符串參數

$.getJSON("/Home/Results?search=" + searchText,bindresults); 

來修復綁定。

+0

我已經改變了它T0 $ .getJSON( 「/首頁/業績/」,{搜索:SEARCHTEXT},功能(數據){警報( 「G」); movieView.set_data(數據);} ); 其中警報框用於調試。 事情是它永遠不會到達。 如果我在控制器上放置一個斷點,它會返回一個JSON結果。 任何想法? – ddd 2009-02-11 14:34:47

+0

實際上它確實會調用該函數,但前提是控制器不返回結果。 我不認爲設置數據正在調用,當我打算。我需要清除舊數據嗎? – ddd 2009-02-11 14:42:56