1

我有一个 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 错误。

它正在尝试访问 URL:

http://localhost:xx/Home/@Url.Action(%22GetResult%22,%20%%22Home%22)

那么这显然是不对的。

有人知道我在做什么错吗?

4

2 回答 2

2

您不能在 JavaScript 文件中使用 Razor 语法。Razor 是一种服务器端脚本构造,需要由 ASP.Net 解析才能运行。

你有两个选择:

选项一:

将脚本移动到.cshtml视图文件中。

选项二:

创建一个接受 url 作为参数的 JavaScript 函数并从视图中调用它:

function foo(posturl){
    $.post(url, null, function (data) {
        alert(data);
    });
}

/* View */
foo('@Url.Action("GetResult", "Home")');
于 2012-07-24T21:23:24.200 回答
0

它仅适用于 Razor 视图。如果您想在外部 javascript 文件上访问它,您可以在 razor 视图中使用 HTML Helper 方法获取路径名称,并将其保存在全局 java 脚本变量中并在外部 javascript 中访问它文件

在你看来,

<script type="text/javascript>
  var globalGetResultPath='@Url.ACtion("GetResult","Home)';
</script>

现在在外部脚本中你可以调用

$.get(globalGetResultPath, function (data) {
    alert(data);
});
于 2012-07-24T21:25:05.603 回答