19

从一个页面我有以下内容:

@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

4

7 回答 7

45

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

return Redirect(Request.UrlReferrer.PathAndQuery);
于 2014-09-10T08:42:59.337 回答
16

Request您可以从控制器中获取引用 URL :

public ActionResult AddEntry(string ip, int TypeId, string returnUrl)
{

     // Do some stuff
     string url = this.Request.UrlReferrer.AbsolutePath;

     return Redirect(url);
}

这会将您完全重定向到调用 URL。

于 2013-09-18T17:00:10.820 回答
15

您可以使用一种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

于 2013-09-18T16:50:31.130 回答
9

在您的控制器类中使用Request.UrlReferrer. 无需从页面传递 url。

   public ActionResult AddEntry(string ip, int TypeId)
    {

         // Do some stuff

         return Redirect(Request.UrlReferrer.ToString());
    }
于 2013-09-18T16:57:41.763 回答
0

我发现使用 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);
}

请注意,该方法允许 Query String 覆盖。

这可以用作任何控制器中的辅助方法,如下所示:

重定向而不更改查询字符串(如果有):

return RedirectToCurrentUri()

示例查询字符串覆盖:

return RedirectToCurrentUri("?success=true")
于 2019-12-20T15:09:44.607 回答
0
@using (Html.BeginForm("AddEntry", "Configure", new { returnUrl = this.Request.RawUrl }))
{
    @Html.TextBox("IP")
    @Html.Hidden("TypeId", 1)
    <input type="submit" value="@Resource.ButtonTitleAddComponent" />
}

像这样更改您的代码

于 2018-05-09T10:00:57.017 回答
-2
  1. 点赞Edit(int? id)

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

    return Redirect(RefUrl);
    
于 2016-01-09T04:39:23.797 回答