[英]How to redirect a page from a View to a Controller in ASP.NET MVC 3?
[英]How do you redirect to the calling page in ASP.NET MVC?
假设我有一个控制器动作,用于删除用户购物篮中的某个项目。 通过对url~ / delete / {id}执行POST来触发此控制器操作。 如果我的应用程序上有多个页面将发布到此URL,我该如何构建控制器操作以重定向回发布到它的页面?
我就是做这个的:
public ActionResult ResendActivationEmail()
{
// Do other things here
return new RedirectResult(Request.UrlReferrer.AbsoluteUri);
}
您应该从发布页面提供RedirectToUrl参数。
依赖引用标头不是一个好习惯。
相反,做这样的事情:
public ActionResult Delete(int id, string RedirectToUrl)
{
// check if RedirectToUrl is null or empty and redirect accordingly
}
在发布视图或部分视图上,您可以通过多种方式提供参数:
<%= Html.Hidden("RedirecToUrl","/my/lovely/url") %>
要么
<form action="/item/delete/22?RedirectToUrl=/my/lovely/url">
我更喜欢第一种选择。
我要做的第一件事是使用Ajax.ActionLink,然后如果用户打开了Javascript,你就永远不会离开页面。 这是最好的解决方案。 如果您不想要链接,也可以使用Ajax表单。 其中任何一个都可以使用DELETE或POST方法。
为了处理关闭Javascript的情况,当您在控制器中检测到POST没有使用Ajax(Request.IsAjaxRequest为false)时,您可以查看Request.UrlReferer属性以获取引用的Url页。 如果这不为null,则可以使用RedirectResult返回此页面。 如果为空,请选择默认目标网页 - 可能类似于“您的项目已被删除,请点击此处继续购物”。 后者很可能很少受到打击。
我从来没有尝试过,但您可以使用Referer标头来了解post或get的来源,并尝试将URL与路由匹配。
只需使用URL Referer [sic]标头即可。
var requestFrom = Request.UrlReferrer
您可以在以下网址找到该文档: http : //msdn.microsoft.com/en-us/library/system.web.httprequest.urlreferrer.aspx
这是不可行的唯一一次是直接请求页面,但在这种情况下,您无论如何都没有任何地方可以重定向。
还可以选择使用AJAX执行唯一的异步操作,以便您的Delete操作仅执行其描述的操作,并且不负责执行其预期删除目的之外的操作。
如果您使用WCSF(Web客户端软件工厂)来实现MVC模式,则可以使用PageFlow执行所有导航。
例如:-
PageFlow.Next(); 或PageFlow.Previous();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.