1

这是我的 ajax jQuery 代码:

$.ajax({
            url: '@Url.Action("IsLoggedIn","Ajax")',
            type: "POST",
            data: "Command=CheckLogin",
            cache:false,
            success: function (dataFromServer) {
                if ($.trim(dataFromServer) == "no") {
                    showLoginAndRegisterNowForm(obj);
                }
            },
            error: function (a, b, c) {
                alert(c);
            }
        });

此代码写在单独的 .js 文件中,并添加到带有标签的 .cshtml 页面。我在Controllers文件夹中的控制器名称是AjaxController.cs,它与此页面控制器不同。控制器方法是:

        [HttpPost]
        public ActionResult IsLoggedIn(string Command)
        {
            return Content("yes");
        }

当我使用这段代码时,ajax 会error运行并说internal server error. 我应该怎么办?

4

3 回答 3

0

我知道你已经解决了这个问题,但我发给你是因为它可能很有用。当您设置了虚拟路径时,它也很有用。在此示例中,您的页面 (cshtml) 中不需要 javascript。

CSHTML:

<input type="hidden" id="UrlAjaxIsLoggedIn" value="@Url.Action("IsLoggedIn","Ajax")" />

JS:

$.ajax({
    url: $('#UrlAjaxIsLoggedIn').val(),
    type: "POST",
    data: "Command=CheckLogin",
    cache: false,
    success: function (dataFromServer) {
        if ($.trim(dataFromServer) == "no") {
            showLoginAndRegisterNowForm(obj);
        }
    },
    error: function (a, b, c) {
        alert(c);
    }
});
于 2013-06-17T21:20:03.430 回答
0

更改 URL,在单独的 js 文件url: "/Ajax/IsLoggedIn"解决问题!

于 2013-06-17T20:36:53.327 回答
0

如果您仍想基于 MVC 路由以编程方式生成 URL,请考虑为您的脚本提供一个初始化函数,您可以在其中传递配置,例如 URL。然后使用内联脚本块在 Razor 视图中初始化脚本:

<script>
    yourJSModule.initialize({
        isLoggedInUrl: '@Url.Action("IsLoggedIn","Ajax")'
    });
</script>

这样,您就可以保留非硬编码 URL 和单独的脚本文件(初始化除外)的好处。

于 2013-06-17T20:44:27.973 回答