【问题标题】:How do I use Server.Transfer method in asp.net MVC?如何在 asp.net MVC 中使用 Server.Transfer 方法?
【发布时间】:2009-05-11 08:45:39
【问题描述】:

我正在尝试将其用于登录页面。

if (Session["UserID"] == null)
     Server.Transfer("/Account/Login", true);

但我得到了异常 -> 执行子请求 /Account/Login 时出错。

【问题讨论】:

  • +1'ed Mark 的回答。我会使用“return RedirectToAction("SomeOtherAction");”。您是否出于某些原因不希望访问者看到重定向的 URL?

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


【解决方案1】:

You do this!

        return new MVCTransferResult(...);

请查看我的答案(链接)以及接受的答案。

【讨论】:

    【解决方案2】:

    要使用服务器传输方法,您可以查看 Simon Weaver 的 this,但在您的问题的上下文中,我会改用重定向操作。

    RedirectToAction(new {
       controller="Account", 
       action="Login"
    });
    

    让它告诉登录控制器回到哪里去尝试

    RedirectToAction( new {
       controller="Account",
       action="Login",
       new RouteValueDictionary { 
          {"actionToGoBackTo", "theActionName"},
          {"controllerToGoBackTo", "theControllerName"}
       }); 
    

    请注意,登录操作需要使用两个字符串参数,actionToGoBackTo 和 controllerToGoBackTo。

    【讨论】:

    • 好吧,其实我正在努力解决问题-> stackoverflow.com/questions/846775/…
    • 你不能在重定向时传递一些路由数据,这将告诉登录页面在成功登录时重定向到哪个 paeg。但是那样的话,你必须让你的提交方法重定向到路由数据所说的任何页面。
    • 你的意思是,我应该将 url 作为 routerdata 传递,例如 return RedirectToAction("Login", "Account", this.Url); ?
    • 感谢您的关注。我按照您的指示进行操作,但是这种方法仍然存在一个问题,即表单数据(使用输入类型 =“提交”)。如何保存这些数据?
    • 虽然这个答案对 OP'r 有帮助,但对于我们这些试图为自己的目的寻找同一问题的答案的人来说却是无益的。 RedirectToAction 实际上会发出 301/302 重定向,而不是原始问题的答案。 Server.Transfer 以静默方式处理备用处理程序,而不会出现 HTTP 喋喋不休,如果您不希望已处理的处理程序再次通过路由引擎备份,这一点很重要。
    【解决方案3】:

    您应该在 Server.Transfer 中获得与您想要的完全相同的结果。

    public ActionResult Index() {
        ......
          var url = "/MyContoller?param=xxx";
          Server.TransferRequest(url, true);
          return new EmptyResult();
    }
    

    【讨论】:

      猜你喜欢
      • 2010-10-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-19
      • 2023-04-04
      • 2010-11-10
      • 1970-01-01
      • 2017-02-03
      相关资源
      最近更新 更多