【问题标题】:Asp.net MVC redirect Url to another controller viewAsp.net MVC 将 Url 重定向到另一个控制器视图
【发布时间】:2015-04-30 21:34:41
【问题描述】:

我对 MVC 非常陌生,正在尝试将 asp.net 应用程序迁移到 MVC。基本上我试图尽可能重用代码。在一种情况下,我尝试使用 Redirect("SomeUrl") 并且它在同一控制器下的视图中运行良好。

例如,我在 HomeController.cs 中添加了下面的代码

public ActionResult Login()
{
 return Redirect("HomeMgr?Section=home&Type=Mgr");
}

好吧,如果我可以使用 Redirect(Url) 重定向到另一个控制器中的视图,有人可以建议我吗? Url 是否有任何格式,例如

"~/controllername/Viewname?something=something&something=otherthing"

(我在其他帖子中读到可以使用 RedirectToAction 实现此目的,但我试图不更改使用查询字符串值的现有代码。)

【问题讨论】:

标签: asp.net-mvc


【解决方案1】:

不要使用重定向来重定向到应用中的操作。有几个原因。首先,正如 Alundra 的回答所提供的那样,用户 RedirectToAction 更简单。然而,更简单只是答案的一部分。

使用重定向存在问题。这与路由在 MVC 中的工作方式有关。在 MVC 中,您可以通过多个不同的 URL 达到相同的操作。例如,在默认的 MVC 模板中,以下都是有效的 URL。

http://yoursite/
http://yoursite/Home
http://yoursite/Home/Index

现在,当您使用重定向时会发生什么?如果您使用最后一个 url,它将正常工作。您最终会得到以下网址。

http://yoursite/Home/HomeMgr?Section=home&Type=Mgr

但如果你在其他任何一个地方,你就有问题了......

http://yoursite/HomeMgr?Section=home&Type=Mgr

糟糕...这行不通...这将寻找一个名为 HomeMgrController 的控制器。

你在根目录上也一样。

使用 RedirectToAction 解决了这个问题,因为它会考虑您的路由,并会根据您指定的控制器和操作找出正确的 url 以将您重定向到。

【讨论】:

    【解决方案2】:
    return RedirectToAction("ActionName", "ControllerName", new { Section=home,Type=Mgr ......Anythingelse you want to pass  });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-07-01
      • 2011-07-21
      • 1970-01-01
      • 1970-01-01
      • 2017-09-25
      相关资源
      最近更新 更多