我有一个MVC应用程序,它有一个带有GetResult方法的家庭控制器:
public int GetResult()
{
return 3;
}
我使用以下命令在javascript文件中调用它:
$.post('/Home/GetResult', null, function (data) {
alert(data);
});
它工作正常。
然而,我试图用一种没有硬化的方式来调用它
$.get('@Url.Action("GetResult", "Home")', null, function (data) {
alert(data);
});
这不起作用我得到500错误。
它正试图访问网址:
http://localhost:xx/Home/@Url.Action(%22GetResult%22,%20%%22Home%22)
这显然是不对的。
任何人都知道我做错了什么?
答案 0 :(得分:2)
您不能在JavaScript文件中使用Razor语法。 Razor是一个服务器端脚本构造,需要由ASP.Net解析才能运行。
您有两种选择:
选项一:
将脚本移动到.cshtml
视图文件中。
选项二:
创建一个JavaScript函数,接受url作为参数并从视图中调用它:
function foo(posturl){
$.post(url, null, function (data) {
alert(data);
});
}
/* View */
foo('@Url.Action("GetResult", "Home")');
答案 1 :(得分:0)
它仅适用于Razor视图。如果要在外部javascript文件上访问它,可以在剃刀视图中使用HTML Helper方法获取Path名称,并将其保存在Global java脚本变量中并访问外部javascript文件
在您的视图中,
<script type="text/javascript>
var globalGetResultPath='@Url.ACtion("GetResult","Home)';
</script>
现在你可以在外部脚本中调用
$.get(globalGetResultPath, function (data) {
alert(data);
});