0

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

RedirectToAction("Index", "MyController");

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

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

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

这将我重定向到//MyApp/SomeOtherController

问题在于**/**第一条路线的尽头。我在 onClick 调用 jQuery .post() 的母版页上有 partialView。

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

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

/MyController/Controller/Action 

那不存在。如果我将我的邮寄电话更改为

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

它工作正常,但不适用于导航链接,因为它们**/**在路线尽头没有。

我该怎么办?如何从 RedirectToAction 和 ActionLink 获得独特的路径,无论**/**最后有还是没有?

笔记:

我可以<a></a>用于母版页上的导航并**/**在最后输入路径,但我宁愿使用 ActionLink

4

1 回答 1

1

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

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

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
        });
}
于 2013-03-19T15:23:43.067 回答