2011-06-25 78 views
2

我打電話一個AJAX方法如下Asp.net Ajax和MVC2

var srchText = "Chicago"; 


$.ajax({ 
    url: "/Ajax/GetCities", 
    data: "{'srchText' : '" + srchText + "'}", 
    dataType: "json", 
    type: "POST", 
    async: false, 
    contentType: "application/json; charset=utf-8", 
    dataFilter: function (data) { return data; }, 
    success: function (data) { 
     cityList = data.d; 
    } 
}); 

的URL是指向一個MVC控制器,如下面,

[HttpPost] 
    public ActionResult GetCities(string srchText) 
    { 
     List<City> result = new List<City>(); 
     EventsBIZ objBIZ = new EventsBIZ(); 
     result = objBIZ.ToList<City>(objBIZ.GetCities(srchText)); 
     return this.Json(new GetEventsResponse() { d = result }, JsonRequestBehavior.AllowGet); 
    } 

也有一些是錯誤的代碼,該方法被稱爲成功,但srchText爲空。請幫我弄清楚笏出了問題。在此先感謝

添加從螢火蟲跟蹤的請求。 FireBug Net monitor

+0

瓦在你的路線看起來像?你不能使用(「/ Ajax/GetCities /」+ srchText)嗎?用螢火蟲截圖更新了 –

+0

。我想把它作爲json對象發送,逐漸我想將輸入作爲一個複雜的類。所以通過網址發送它不會幫助我。 – Raghav

回答

4

您的代碼不工作的原因是因爲默認情況下ASP.NET MVC 2不理解JSON請求。沒有內置任何內容允許您發送JSON格式的請求,並且將該請求解析回強類型的動作參數。默認情況下,此功能從ASP.NET MVC 3開始內置。請查看following blog post。你將需要實現JsonValueProviderFactory如果你想使這項工作在ASP.NET MVC 2

而且代替:

data: "{'srchText' : '" + srchText + "'}", 

你應該使用:

data: JSON.stringify({ srchText: srchText }), 

JSON.stringify是適用於現代瀏覽器,適用於較老的您可能需要包含json2.js

,如果你不希望實現JsonValueProviderFactory另一種可能性是使用標準application/x-www-form-urlencoded請求其默認的模型綁定可以理解:

$.ajax({ 
    url: '/Ajax/GetCities', 
    data: { srchText: srchText }, 
    type: 'POST', 
    async: false, 
    dataType: 'json', 
    dataFilter: function (data) { return data; }, 
    success: function (data) { 
     cityList = data.d; 
    } 
}); 
+0

ü釘在頭上。還有一個問題。當我將輸入改爲一個對象而不是一個字符串,並且使用默認的模型聯編程序時,發送一個正常的javascript對象來到服務器。但是對象的屬性被defalted(如在int中爲0並且string爲null)。任何想法如何發送沒有jsonvalueproviderfactory的對象? – Raghav

0

我不認爲你正在傳遞有效的JSON,請嘗試使用:

data: {"srchText" : srchText}, 
+0

nopes ..仍然作爲空... – Raghav

1

你不必送srchTextjson監守你將只發送一個字符串,可以把它作爲查詢字符串

試試這個

var srchText = "Chicago"; 


$.ajax({ 
url: "/Ajax/GetCities", 
data: 'srchText=' + srchText , 
type: "POST", 
async: false, 
dataFilter: function (data) { return data; }, 
success: function (data) { 
    cityList = data.d; 
} 
});