ASP.NET MVC 4 - 控制器结束后重定向到同一页面

本文关键字:重定向 一页 结束 MVC NET 控制器 ASP | 更新日期: 2023-09-27 18:31:45

从页面中,我有以下内容:

@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 变为空,并且它不会重定向到调用控制器的同一页面。想法?

使用:ASP.NET MVC 4 剃刀

ASP.NET MVC 4 - 控制器结束后重定向到同一页面

如果您需要返回到详细信息页面之类的内容并使用查询返回到同一页面,也可以执行此操作:

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")
  1. 上 像Edit(int? id)

    ViewBag.RefUrl = Request.UrlReferrer.ToString();
    
  2. 查看@Html.Hidden("RefUrl");
  3. 在邮政Edit(int id,string RefUrl)

    return Redirect(RefUrl);