1

我不太确定该怎么做。基本上我有一个域,我们就叫它 domain.com。域本身就是企业网站,然后是加盟商网站,通过正斜杠参数访问。因此,例如 domain.com/atl 可能是特许经营商网站。这些加盟商网站与公司网站相同,因此您基本上只是为每个加盟商重新创建整个网站。

这对我来说是棘手的部分。加盟商网站上的某些页面需要可定制。所以我的想法是,这应该由数据库控制,我只需将“atl”作为访问数据库并根据单击的链接返回页面内容的参数,这样我基本上就有 1 个视图文件可以服务无限数量的加盟商。

我不明白的是你如何传递这个参数。以链接为例。假设我访问了 domain.com/atl,然后单击了一个名为“stuff”的链接。您将如何将其路由到“stuff”视图并将其显示为 domain.com/atl/stuff 而不是 domain.com/stuff?

有没有一个词来描述这个系统,这将使我的研究更容易?或者有没有人有一个链接可以为我指明正确的方向?谢谢。

4

3 回答 3

1

MikeSW 对路线很接近,但听起来您不希望特许经营商页面与公司页面共享任何控制器。我还有一些其他的想法:

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 方法的重载来解析控制器和操作。(T4MVC在这里也很有帮助,因为它允许我们为这些方法的参数强输入区域、控制器和动作名称。)

MVC 将在为其呈现视图的 URL 中自动使用“环境”路由参数。因此,如果您在 URL 上domain.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<a>标记的 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"
})
于 2012-04-11T07:19:59.033 回答
0

在路由中,视图无关紧要,只有控制器在选择要返回的视图时才重要。我认为这毕竟是关于多租户的,至少在这种情况下,anwser 非常简单。有一个包含租户名称或 ID 的路由定义

routes.MapRoute("default","{tenant}/{controller}/{action}",new{ tenant="default", controller="home", action="index"})

使用此路由,如果未指定租户,则假定为“默认”(可能是公司站点本身)。

关于一些需要定制的页面,数据库是用来存储东西的,不是用来控制逻辑的。我认为,事情比你想象的要简单,你只需要在数据库中存储一些自定义细节(某个视图名称或 CSS、js),然后将它们提供给视图。基本上,控制器从数据库中获取所需的最少信息,然后选择相关视图,创建视图模型并返回该视图。

于 2012-04-11T05:27:17.917 回答
0

您可以通过使用 IOC 容器(如结构图)实际创建多租户 Web 应用程序来采取不同的方法。 扎克欧文斯有一个关于如何做到这一点的入门样本

创建一个多租户 Web 应用程序显然不能放在帖子中,但如果你想了解更多信息,可以给我发消息。

我认为,如果您尝试通过路由来处理这一切,您将会造成一团糟。

于 2012-04-11T06:02:53.560 回答