鉴于MVC路线:
[Route("user/{userId}")]
public async Task<ActionResult> GetUser(int userId)
{
var vm = await _userService.GetVm();
return View(vm);
}
目前浏览器显示/user/2
但是我想“重定向”到/
,剥离slu ..我说“重定向”因为我不想重新路由;我想在GetUser
内完成工作并返回一个响应,告诉浏览器相应地更改显示的URL。这可能吗?
答案 0 :(得分:3)
返回一个响应,告诉浏览器相应地更改显示的URL
这不是HTTP请求/响应的工作方式。客户端请求一个URL,服务器不会使用URL回复。但它可以回应各种各样的反应。例如,如果您希望客户端向特定网址发出新请求,那就是重定向:
return Redirect(Url.Content("~/"));
但是,如果确实希望使用内容进行回复:
return View(vm);
然后你的内容需要做一些改变URL的事情。那将是in client-side code。我不希望100%可靠,如果某些浏览器(或某些浏览器设置)认为它是潜在的安全欺骗并且不允许它,我不会感到惊讶。
在这两种方法之间,前者是最常见的。但是,您在代码中显示的操作似乎并不能保证。如果您的目的是从站点根目录显示有关用户(或数据中的任何记录)的信息,而不要求客户端导航到请求它的URL,那么您的站点根目录可能是您要为其发出AJAX请求相反,数据。
答案 1 :(得分:0)
重定向到主页索引操作。
如果您在家庭控制器内,请执行以下操作:
public ActionResult Index()
{
return View()
}
[Route("user/{userId}")]
public async Task<ActionResult> GetUser(int userId)
{
var vm = await _userService.GetVm();
return PartialView("_JSRedirect", new JSRedirectViewModel() { Location = Url.Action("Index") });
}
您的JSRedirectViewModel将如下所示:
public class JSRedirectViewModel
{
public string Location { get; set; }
}
您的_JSRedirect部分视图将如下所示:
@model Adservio.Models.JSRedirectViewModel
@{
Layout = null;
}
<script type="text/javascript">
window.location = '@Model.Location';
</script>
您通常会以这种方式从您的视图中调用GetUser Action:
<div id="AlertDiv"></div>
<div id="MsgDiv"></div>
<button onclick="GetUser()">Perform User Action</button>
<script type="text/javascript">
$.post({
url: "@Url.Action("GetUser")",
data: { },
global: false,
success: function (r) {
$('#AlertDiv').html(r);
}
});
</script>
为JQuery道歉...