RedirectToAction和ActionLink的区别导致.post()不起作用

时间:2013-03-19 13:32:55

标签: asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing url-routing

我有应用程序在登录后使用RedrirectToAction()从帐户控制器将用户重定向到某个控制器的索引页面。

RedirectToAction("Index", "MyController");

它将我重定向到//MyApp/MyController/

我也在MasterPage视图上导航,我使用ActionLink:

@Html.ActionLink("Index", "SomeOtherController")
... (other links)

将我重定向到//MyApp/SomeOtherController

问题出在第一条路线末端的**/**字符中。我在master页面上有部分视图onClick调用jQuery .post()。

function SomeFunction(id) {
    $.post("Controller/Action", { id: id },
        function () {
            ... some code
        });
}

但是当我从登录重定向后调用该函数时,它会尝试访问此路由:

/MyController/Controller/Action 

不会延长。如果我将我的帖子改为

$.post("../Controller/Action",  ...

它工作正常,但之后不适用于导航链接,因为他们在路线末端没有**/**

我该怎么办?如何从RedirectToAction和ActionLink获取唯一路径,最后是否有**/**

注:

我可以在主页上使用<a></a>进行导航,最后输入**/**的路径,但我更愿意使用ActionLink

1 个答案:

答案 0 :(得分:1)

这里的关键是你需要MVC生成你的路由URL,以便传递给你的jQuery函数。

1.如果您的jQuery代码嵌套在View中,您可以执行以下操作:

function SomeFunction(id) {
    $.post('@Url.RouteUrl("Action", "Controller")', { id: id },
        function () {
            ... some code
        });
}

2.如果您的jQuery代码位于外部文件(例如myScripts.js)中,那么您将需要以某种方式将MVC生成的路由传递给您的jQuery函数。由于这不直接与元素绑定,因此最好将其设置为视图中的隐藏元素。

查看

<input type="hidden" id="jsRoute" value="@Url.RouteUrl("Action", "Controller")"/>

<强> JS

function SomeFunction(id) {
    $.post('$("#jsRoute").val()', { id: id },
        function () {
            ... some code
        });
}