[英]Ajax request not passing parameter to ASP.NET MVC controller
試圖在stackoverflow中查找,因為這看起來很瑣碎。 發現了許多類似的問題並仔細閱讀。 使用這些示例未找到解決方案。 這是我的代碼,有人可以幫忙嗎?
function testAjax() {
return $.ajax({
type: "GET",
url: '@Url.Action("Nodes","Competence", new { userId = Sven });',
contentType: "application/json;charset=utf-8",
dataType: "json"
});
}
var promise = testAjax();
promise.success(function (data) {
var dataConverted = JSON.stringify(data);
$('#tree').treeview({ data: dataConverted, multiSelect: true });
});
ASP.NET MVC方法
public JsonResult Nodes(string userId)
{
var temp = userId;
var list = new List<Node>();
list.Add(new Node("Test1"));
list.Add(new Node("Test2"));
list.Add(new Node("Test3"));
return Json(list, JsonRequestBehavior.AllowGet);
}
編輯:就在萬聖節之夜我即將發瘋之前,我想出了嘗試進行新的嘗試的方法。 原來這只是一個緩存問題。謝謝大家的幫助
由於它是一個GET動詞,因此最容易將其作為查詢字符串值傳遞。 這也更符合RESTful設計。
例如,替換@Url.Action("Nodes","Competence")
與
@Url.Action("Nodes","Competence", new { userId = id });
然后,您可以刪除數據屬性。 這會將?userId = valueOfId附加到您的網址中,然后應正確地將其映射到您的操作中,並正確填充userId
。
更新資料
如@freedomn -m所述:
在服務器端構建視圖時,將生成url。 如果參數從不更改,那就很好-但是參數保持不變的可能性相對較小,在這種情況下,如果要在querystring上添加url參數,則應在運行時添加url參數。
這是完全准確的。 在不知道您的確切實現的情況下,我只能做一些假設。 但是從技術上講,您可以將ajax調用包裝在一個函數中,然后可以傳入userId
並在該函數中生成url,或者傳入url,在函數外部執行url生成。
這意味着您只需要執行ajax請求的一個函數,而可以使用另一個函數來獲取userId
(並可能生成url),然后將其傳遞給ajax函數。 如何存儲userId
完全取決於您,但是我建議的一件事是調查數據屬性 ,這是在html元素上存儲數據的相當明確的方法。
由於您的服務器可能不希望收到帶有JSON內容的請求,因此請嘗試在ajax調用中刪除contentType參數。 它的默認值為“ application / x-www-form-urlencoded; charset = UTF-8”,在大多數情況下都可以。
它的類型應該是“ POST”
return $.ajax({
type: "POST",
url: '@Url.Action("Nodes","Competence")',
data: { userId: "Test" },
contentType: "application/json;charset=utf-8",
dataType: "json"
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.