【问题标题】:Asp.net mvc refresh page after HTTPPOSTHTTPPOST后的Asp.net mvc刷新页面
【发布时间】:2018-04-23 23:42:01
【问题描述】:

我对 ASP.MVC 有疑问。我从许多页面调用此操作方法,刷新页面后我需要,但我没有指向用户所在页面的链接。

public ActionResult Hide<T>(T item, User user) where T : IHidable
{
    //... Some action
    return SomeThingWhatINeedAndRefreshPage();

    //Now I use this, but I do not want to redirect user to Home
    //return RedirectToAction("Index", "Home");
}

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-5


    【解决方案1】:

    您可以获得如下所示的操作和控制器名称,并使用这些值调用RedirectToAction

    string actionName = this.ControllerContext.RouteData.Values["action"].ToString(); string ctrlName= this.ControllerContext.RouteData.Values["controller"].ToString();

    【讨论】:

    • 这给出了当前的动作和控制器。 OP 试图实现的是获取调用操作,以便他可以重定向回它。
    • 是的,确实如此。我的错。
    【解决方案2】:

    一种可能性是将客户端所在的原始页面作为附加参数传递:

    public ActionResult Hide<T>(T item, User user, string returnUrl) where T : IHidable
    {
        //... Some action
    
        return Redirect(returnUrl);
    }
    

    现在,当您构建此控制器操作的 url 时,只需包含当前请求中的 returnUrl 参数即可。

    【讨论】:

    • 所以在每次使用这个方法时,我必须添加 url 作为参数?
    • 是的,您需要添加它,以便您的控制器操作知道重定向到哪里。当然参数可以是可选的。如果未提供,您可以重定向到某个默认位置。
    • 你可以试试return Redirect(Request.Referrer);
    【解决方案3】:

    这有助于我保留我的查询字符串:

    return Redirect(Request.UrlReferrer.ToString());
    

    我根据@YuriyP 留下的评论做出此决定,并决定将其作为完整答案。
    这可能会破坏一些开发模式,因为您可能希望在没有完整回发的情况下异步更新页面的一部分。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-04
      • 2019-09-12
      • 2019-03-07
      • 2018-04-26
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      相关资源
      最近更新 更多