如何在动作剃刀语法中使用ajax url中的var

时间:2017-01-26 15:46:22

标签: javascript ajax asp.net-mvc razor

我有一个函数通过Action URL调用控制器中的方法,但是我需要使用类似于Method的参数,但这不可能这样。

function changeDropDownList(id, dropNameToChange, actionName, descriptionName) {

    var control = $('#'+dropNameToChange);
    control.prop("disabled", false);

    $.ajax({
        //Here I need use the actionName var, but only accept a string
        url: '@Url.Action(actionName, "ThirdPartiesDef")',
        dataType: "JSON",
        data: { id: id },
        contentType: "application/json; charset=utf-8",
        success: function (result) {
            control.empty();
            $.each(result, function (index, item) {
                control.append(
                    $('<option/>', {
                        value: item.Id,
                        text: item[descriptionName]
                    })
                );
            });
        },
        error: function (error) {
            alert("Error: " + error);
        }
    });
}

我不太了解ajax,如果你能说一些更简单的方法,那就没关系。

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

您可以在Url.Action 服务器端 Razor功能中使用占位符,该功能将替换为客户端端的javascript actionName变量

url: '@Url.Action("#THE-ACTION#", "ThirdPartiesDef")'.replace('#THE-ACTION#', actionName)

基本上会在浏览器上的中发出以下标记

url: '/#THE-ACTION#/ThirdPartiesDef/'.replace('#THE-ACTION#', actionName)

在客户端调用changeDropDownList javascript函数后,它将使用actionName javascript变量替换占位符,最终将使用正确的url用于AJAX调用。

作为旁注,您应该从AJAX调用中删除contentType: "application/json; charset=utf-8"参数,因为您的data参数中根本没有发送任何JSON。

答案 1 :(得分:0)

您必须使用JSON.stringify()方法。

JSON.stringify()方法将javascript对象转换为json文本,并将其存储在string中。

您指定contentType: "application/json; charset=utf-8",server等待receive格式的json数据。

另外,您使用了错误的@ Url.Action:@Url.Action(actionName, "ThirdPartiesDef")',

一种解决方案是使用.replace功能:

'@Url.Action("myAction", "ThirdPartiesDef")'.replace('myAction', actionName)

在Razor中,使用@ block的每个内容都会自动由Razor进行HTML编码。