MVC jquery不能用于非硬编码获取

时间:2012-07-24 21:20:18

标签: jquery asp.net-mvc

我有一个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)

这显然是不对的。

任何人都知道我做错了什么?

2 个答案:

答案 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);
});