簡體   English   中英

Ajax請求未將參數傳遞給ASP.NET MVC控制器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM