我有应用程序在登录后使用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
答案 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
});
}