[英]ASP.NET MVC 4 - Redirect to the same page after controller ends
从一个页面我有以下内容:
@using (Html.BeginForm("AddEntry", "Configure", FormMethod.Get, new { returnUrl = this.Request.RawUrl }))
{
@Html.TextBox("IP")
@Html.Hidden("TypeId", 1)
<input type="submit" value="@Resource.ButtonTitleAddComponent" />
}
所以控制器被正确调用:
public ActionResult AddEntry(string ip, int TypeId, string returnUrl)
{
// Do some stuff
return Redirect(returnUrl);
}
我的问题是 returnUrl 为 null 并且它不会重定向到调用控制器的同一页面。 想法?
使用:ASP.NET MVC 4 Razor
如果您需要返回详细信息页面之类的内容并使用查询返回同一页面,您也可以这样做:
return Redirect(Request.UrlReferrer.PathAndQuery);
您可以从控制器中的Request
中获取引用 URL:
public ActionResult AddEntry(string ip, int TypeId, string returnUrl)
{
// Do some stuff
string url = this.Request.UrlReferrer.AbsolutePath;
return Redirect(url);
}
这会将您准确重定向到调用 URL。
您可以使用Request.QueryString
方法从 URL 获取一些值,例如:
@using (Html.BeginForm("AddEntry", "Configure", FormMethod.Get, null))
{
@Html.TextBox("ip")
@Html.Hidden("TypeId", 1)
@Html.Hidden("returnUrl", this.Request.RawUrl)
<input type="submit" value="@Resource.ButtonTitleAddComponent" />
}
在您的控制器中,将其作为参数string returnUrl
。
在您的控制器类中使用Request.UrlReferrer
。 无需从页面传递 url。
public ActionResult AddEntry(string ip, int TypeId)
{
// Do some stuff
return Redirect(Request.UrlReferrer.ToString());
}
@using (Html.BeginForm("AddEntry", "Configure", new { returnUrl = this.Request.RawUrl }))
{
@Html.TextBox("IP")
@Html.Hidden("TypeId", 1)
<input type="submit" value="@Resource.ButtonTitleAddComponent" />
}
像这样改变你的代码
我发现使用 UrlReferrer 效果很好,并允许我在需要时添加额外的参数。
辅助方法示例:
protected RedirectResult RedirectToCurrentUri(String strQueryStringOverride = "")
{
String strReferrer = Request.UrlReferrer.AbsoluteUri;
if (String.IsNullOrWhiteSpace(strReferrer))
{
strReferrer = "/";
}
// Can also override referrer here for instances where page has
// refreshed and replaced referrer with current url.
if (!String.IsNullOrWhiteSpace(strQueryStringOverride))
{
String strPath = (strReferrer ?? "").Split('?', '#')[0];
return Redirect(strPath + strQueryStringOverride);
}
return Redirect(strReferrer);
}
请注意,该方法允许查询字符串覆盖。
这可以用作任何控制器中的辅助方法,如下所示:
重定向而不更改查询字符串(如果有):
return RedirectToCurrentUri()
示例查询字符串覆盖:
return RedirectToCurrentUri("?success=true")
在 Get like Edit(int? id)
ViewBag.RefUrl = Request.UrlReferrer.ToString();
@Html.Hidden("RefUrl");
在后期Edit(int id,string RefUrl)
return Redirect(RefUrl);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.