【问题标题】:ASP .NET MVC 3 same route for multiple actions based on criteria基于条件的多个操作的 ASP .NET MVC 3 相同路由
【发布时间】:2013-04-20 21:09:55
【问题描述】:

在 ASP .NET MVC 3+ 中是否可以根据特定状态为多个操作使用相同的路由?

例如,在 LinkedIn 或一些类似的网站上,相同的路由 http://site-domain/home 用于多个视图。

如果用户未登录,主页会显示欢迎视图,但如果用户已登录,则会显示用户的主页,其中显示他的通知和其他用户特定数据。

我们能否根据用户的登录状态或任何其他类型的数据控件,使用相同的路由 url 路由到不同控制器的不同操作?

注意:在同一操作中显示不同的视图不是一种选择,因为两个操作具有完全不同的逻辑。

【问题讨论】:

  • 为什么不保持动作不变,根据具体状态改变视图?
  • 因为两个动作的逻辑完全不同,所以不能只改变视图来处理

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


【解决方案1】:

当然。您有两个选择,第一个是根据用户的某些属性为用户提供您选择的视图,但您对视图模型的控制有限。

public ActionResult SomeAction(){

if(User.Identity.Name == "Admin")
    return View("AdminView");
else
    return View("SomeOtherView");
}

另一种选择是在控制器方法内将用户重定向到另一个操作,如:http://weblogs.asp.net/mikebosch/archive/2008/02/02/asp-net-mvc-tip-2-redirecting-to-another-action-and-passing-information-to-it.aspx

当然,始终可以选择根据某些用户属性在页面上呈现部分视图。如果您可以提供有关您的项目的更多信息,这将有助于找到解决方案。

【讨论】:

  • 这不是我的问题的答案。我不想显示另一个视图,我想路由到另一个动作。这也与重定向不同。
  • 那么为什么不使用 return RediredtToAction("ActionName") 与对应于该用户的适当操作的操作名称?
  • 顺便说一句,如果这是你要找的stackoverflow.com/questions/8600949/…?
  • 谢谢斯米萨克。如果要使用相同的控制器,则可以选择自定义操作方法选择器。不完全是我想要的,但可能会有所帮助
猜你喜欢
  • 2018-05-29
  • 1970-01-01
  • 2021-08-07
  • 2012-02-21
  • 1970-01-01
  • 2013-01-05
  • 2011-11-17
  • 2014-02-12
  • 1970-01-01
相关资源
最近更新 更多