Asp.net mvc 3 mvc3中的路由
我不太清楚该怎么做。基本上我有一个域名,我们就叫它domain.com。域本身就是公司网站,然后是通过正斜杠参数访问的特许经营商网站。因此,例如domain.com/atl可能是特许经营人网站。这些特许经营商网站与企业网站相同,因此您基本上只是为每个特许经营商重新创建整个网站 对我来说,这是棘手的部分。特许经营商网站上的某些页面需要定制。因此,我的想法是,这应该由数据库控制,我只需要将“atl”作为一个参数,点击数据库并根据单击的链接返回页面内容,这样我基本上有一个视图文件,可以为无限数量的特许经营商服务 我不明白的是你怎么传递这个参数。例如,链接。假设我进入domain.com/atl,点击一个名为“stuff”的链接。您将如何将其路由到“stuff”视图,并将其显示为domain.com/atl/stuff而不是domain.com/stuffAsp.net mvc 3 mvc3中的路由,asp.net-mvc-3,routing,Asp.net Mvc 3,Routing,我不太清楚该怎么做。基本上我有一个域名,我们就叫它domain.com。域本身就是公司网站,然后是通过正斜杠参数访问的特许经营商网站。因此,例如domain.com/atl可能是特许经营人网站。这些特许经营商网站与企业网站相同,因此您基本上只是为每个特许经营商重新创建整个网站 对我来说,这是棘手的部分。特许经营商网站上的某些页面需要定制。因此,我的想法是,这应该由数据库控制,我只需要将“atl”作为一个参数,点击数据库并根据单击的链接返回页面内容,这样我基本上有一个视图文件,可以为无限数量的特许
有没有一个词来描述这个系统,使我的研究更容易?或者有没有人能把我引向正确的方向?谢谢。在路由中,视图并不重要,只有控制器在选择要返回的视图时才重要。我认为这毕竟是关于多租户的,至少在这种情况下,anwser非常简单。具有包含租户名称或id的路由定义
routes.MapRoute("default","{tenant}/{controller}/{action}",new{ tenant="default", controller="home", action="index"})
如果未指定租户,则使用此路由将被视为“默认”(可能是公司站点本身)
关于一些需要定制的页面,数据库是用来存储东西的,而不是用来控制逻辑。我认为,事情比你想象的要简单,你只需要在db中存储一些定制细节(一个特定的视图名称或CSS,js),然后将它们提供给视图。基本上,控制器从数据库获取所需的最小信息A,然后选择相关视图,创建视图模型并返回该视图 在路由中,视图并不重要,只有控制器在选择要返回的视图时才重要。我认为这毕竟是关于多租户的,至少在这种情况下,anwser非常简单。具有包含租户名称或id的路由定义
routes.MapRoute("default","{tenant}/{controller}/{action}",new{ tenant="default", controller="home", action="index"})
如果未指定租户,则使用此路由将被视为“默认”(可能是公司站点本身)
关于一些需要定制的页面,数据库是用来存储东西的,而不是用来控制逻辑。我认为,事情比你想象的要简单,你只需要在db中存储一些定制细节(一个特定的视图名称或CSS,js),然后将它们提供给视图。基本上,控制器从数据库获取所需的最小信息A,然后选择相关视图,创建视图模型并返回该视图 通过使用类似structuremap的IOC容器实际创建多租户web应用程序,您可以采取另一种方法 创建一个多租户的网络应用程序显然超出了发布的范围,但如果您需要更多信息,可以给我发消息
我认为,如果你试图用路由来处理这一切,你会弄得一团糟。有一种不同的方法,你可以使用像structuremap这样的IOC容器来实际创建一个多租户web应用程序 创建一个多租户的网络应用程序显然超出了发布的范围,但如果您需要更多信息,可以给我发消息 我认为,如果你试图通过路由来处理这一切,你的网站将变得一团糟。,但听起来你好像不希望特许经营商页面与公司页面共享任何控制器。我还有一些其他想法:
routes.MapRoute(null, // do not name your routes, they are "magic strings"
"{tenant}/{controller}/{action}",
new
{
// strongly type controller, action, and area names using T4MVC
controller = MVC.Home.Name,
action = MVC.Home.ActionNames.Index,
// it sounds here like you want this controller for franchisees only,
// so corporate pages will use other controllers. if this is the case,
// tenant="default" // require the parameter by not supplying a default
});
不命名路由的原因是,不命名路由会迫使您在某些html帮助程序和控制器方法中使用某些重载。像RedirectToRoute
、@Html.RouteLink
和@Url.RouteUrl
等方法中的许多重载都将路由名称作为第一个参数。通过省略路由中的名称,这迫使我们使用仅依赖于路由参数和HTTP方法的重载来解析控制器和操作。(在这里也很有用,因为它允许我们为这些方法的参数强力键入区域、控制器和操作名称。)
MVC将在呈现视图的URL中自动使用“环境”路由参数。因此,如果您位于URLdomain.com/atl
,并且想要链接到domain.com/atl/stuff
,您可以输出如下超链接:
@Html.RouteLink("Stuff", new
{
// this will render a link with the URL domain.com/atl/stuff
controller = MVC.Stuff.Name,
action = MVC.Stuff.ActionNames.Index,
// you do not need to include franchisee
})
(如果要仅呈现普通HTML
标记的href参数的URL,请改用@URL.RouteUrl
。)
另一方面,如果要从一个特许经营人站点链接到另一个站点,则必须指定特许经营人参数:
@Html.RouteLink("Another franchisee in this state", new
{
// this will render a link with the URL domain.com/macon
controller = MVC.Home.Name,
action = MVC.Home.ActionNames.Index,
franchisee = "macon"
})
,但听起来您不希望特许经营人页面与公司页面共享任何控制器。我还有一些其他想法:
routes.MapRoute(null, // do not name your routes, they are "magic strings"
"{tenant}/{controller}/{action}",
new
{
// strongly type controller, action, and area names using T4MVC
controller = MVC.Home.Name,
action = MVC.Home.ActionNames.Index,
// it sounds here like you want this controller for franchisees only,
// so corporate pages will use other controllers. if this is the case,
// tenant="default" // require the parameter by not supplying a default
});
不命名路由的原因是,不命名路由会迫使您在某些html帮助程序和控制器方法中使用某些重载。像RedirectToRoute
、@Html.RouteLink
和@Url.RouteUrl
等方法中的许多重载都将路由名称作为第一个参数。通过省略路由中的名称,这迫使我们使用仅依赖于路由参数和HTTP方法的重载来解析控制器和操作。(在这里也很有用,因为它允许我们为这些方法的参数强力键入区域、控制器和操作名称。)
MVC将在呈现视图的URL中自动使用“环境”路由参数。因此,如果您位于URLdomain.com/atl
,并且想要链接到domain.com/atl/stuff
,您可以输出如下超链接:<