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 ответа

  1. Поскольку это глагол GET, будет проще передать его в качестве значения querystring. Это также соответствует более лучше с RESTful конструкцией.

    Например заменить @Url.Action("Nodes","Competence")

    с

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

    Затем можно удалить свойство data. Это добавит ?userId=valueOfId в url-адрес, а затем он должен быть правильно сопоставлен с вашим действием с userIdправильно заполненным.

    Обновить

    Как заявил @freedomn-m:

    При построении представления на стороне сервера будет создан url-адрес. Если
    параметры никогда не изменяются, тогда отлично — но относительно маловероятно, что
    параметры не изменятся, в этом случае необходимо добавить url
    параметры во время выполнения, если они нужны в querystring.

    Это совершенно точно. Не зная вашей точной реализации, я могу только делать предположения. Но технически вы можете обернуть свой вызов ajax в функцию, а затем вы можете либо передать userIdи сгенерировать url внутри этой функции, либо передать url, выполняя генерацию url вне функции.

    Это означает, что вам нужна только одна функция, которая выполняет ajax-запрос, и у вас может быть другая функция, которая получает userId(и, возможно, генерирует url), а затем передает это в функцию ajax. Как вы храните userIdэто полностью зависит от вас, но одна вещь, которую я бы предложил, это исследование атрибутов данных, которые являются довольно хорошо определенным способом хранения данных на html-элементах.

  2. Поскольку сервер может не ожидать запроса с содержимым JSON, попробуйте удалить параметр contentType при вызове ajax. Его значение по умолчанию «application / x-www-form-urlencoded; charset=UTF-8» и подходит для большинства случаев.

  3. Это тип должен быть » POST»

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