我有一个函数通过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,如果你能说一些更简单的方法,那就没关系。
感谢您的帮助
答案 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编码。