繁体   English   中英

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

[英]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")
  1. 在 Get like Edit(int? id)

     ViewBag.RefUrl = Request.UrlReferrer.ToString();
  2. 在视图@Html.Hidden("RefUrl");
  3. 在后期Edit(int id,string RefUrl)

     return Redirect(RefUrl);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM