我在外部JS文件中编写了一个jquery函数,并在我需要的地方包含该文件。
在jquery函数中,我从我的控制器调用了action方法。现在我的问题是我无法从外部JS找到该操作方法路径。投掷错误是没有找到的方法。
现在我如何在外部JS中编写动作路径名称,该名称可以在任何地方使用。
我试着提及/调用动作方法 -
1. url: "/Employee/AutocompleteSuggestions"
2. url: "AutocompleteSuggestions"
3. @Html.Raw(Url.Action("AutocompleteSuggestions", "Employee", new { @term = "Term", @moduleName="ModuleName"}))
第三个因为剃刀语法而无效。
如何解决此问题?
我在下面使用了JS -
$.ajax({
url: "AutocompleteSuggestions",
dataType: "json",
contentType: "application/json; charset=utf-8",
type: "POST",
data:
JSON.stringify({
term: request.term,
moduleName: "Employee"
}),
success: function (data) {
response($.map(data, function (item) {
return { label: item.FullName, value: item.Id }
}
))
},
error: function (xhr, ajaxOptions, thrownError) { alert(thrownError); }
})
答案 0 :(得分:1)
您可以将路径放在_Layout.cshtml中的某个位置,例如在body标签中,如下所示
<body data-jsactionurl="@Url.Action("Action", "Controller")">
然后你可以在你的JS文件中得到这个(jQuery):
var action = $("body").attr('data-jsactionurl');
或者甚至喜欢这样:
var action = $('body').data('jsactionurl')
答案 1 :(得分:1)
你在这里遇到的一个问题是可能需要使用全局;这可能容易受到脚本攻击。有关最天真的实现,请参阅我的原始答案。
我认为这可能非常安全 - 但是有更好的Javascript专家可能有更好的答案。
在你的布局/母版中,你可以像这样输出一个脚本块(我正在使用Razor):
<script>
function myActionMethods(){
this.MyActionMethod = function(){
return '@Url.Action("Action", "Controller")';
};
}
</script>
然后在之后包含您的脚本,使用以下内容:
var methods = new myActionMethods();
$.get(methods.MyActionMethod());
当您需要在脚本中使用该URI时(仅使用jQuery Get进行演示)。
回应您对@ David回答的评论
不确定;你可以使用Razor来输出JS:只需编写一个控制器动作来激活一个返回javascript的Razor视图(虽然你必须对响应类型进行一些调整)但如果你这样做会丢失所有的缓存/压缩该脚本的好处,然后你必须再次写回来。
答案 2 :(得分:0)
嗨,你可以这样使用它在下面
url: "@Url.Content("~/City/State")"
在该网址中首先是您的控制器名称,然后是您的操作名称
在我的项目中,我正在使用这个
$.ajax({
url: "@Url.Content("~/City/State")",
dataType: 'json',
data: { countryId: countryID },
success: function (data) {
alert(data);
$("#stateID").empty();
$("#stateID").append("<option value='0'>--Select State--</option>");
$.each(data, function (index, optiondata) {
alert(optiondata.StateName);
$("#stateID").append("<option value='" + optiondata.ID + "'>" + optiondata.StateName + "</option>");
});
},
error: function () {
alert('Faild To Retrieve states.');
}
});
我认为这会让你感到高兴......