Ajax请求不将参数传递给ASP.NET MVC控制器

时间:2016-10-31 13:42:08

标签: javascript asp.net ajax asp.net-mvc

尝试查看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);
    }

编辑: 就在我即将在万圣节之夜变得疯狂之前,我想出去尝试一个新的会议。原来这只是一个缓存问题。谢谢大家的帮助

3 个答案:

答案 0 :(得分:0)

因为它是一个GET动词,所以最容易将其作为查询字符串值传递。这也适用于RESTful设计。

例如,替换@Url.Action("Nodes","Competence")

@Url.Action("Nodes","Competence", new { userId = id });

然后您可以删除数据属性。这会将?userId = valueOfId 附加到您的网址中,然后应该正确地将其映射到您已正确填充userId的操作。

<强>更新

正如@ freedomn-m所说:

  

这将在服务器端构建视图时生成URL。如果   参数永远不变,然后很好 - 但它相对不太可能   参数不会改变,在这种情况下你应该添加网址   运行时的参数,如果你想在查询字符串上。

这是完全准确的。在不知道您的确切实现的情况下,我只能做出假设。但从技术上讲,你可以在一个函数中包装你的ajax调用,然后你可以传入userId并在该函数中生成url或传入url,在函数外部执行url生成。

这意味着您只需要一个执行ajax请求的函数,并且您可以使用另一个获取userId的函数(并可能生成url),然后将其传递给ajax函数。你如何存储userId完全取决于你,但我建议的一件事就是调查data attributes,这是一种在html元素上存储数据的相当明确的方法。

答案 1 :(得分:0)

由于您的服务器可能不会预期带有JSON内容的请求,请尝试删除ajax调用上的 contentType 参数。它的默认值是“application / x-www-form-urlencoded; charset = UTF-8”,对大多数情况都适用。

答案 2 :(得分:0)

它的类型应该是&#34; POST&#34;

return $.ajax({
    type: "POST",
    url: '@Url.Action("Nodes","Competence")',
    data: { userId: "Test" },
    contentType: "application/json;charset=utf-8",
    dataType: "json"
});