我们需要呈现相同的网站,具有不同的主题(和不同的数据),具体取决于网站的“路线”。
注意:这些不是用户可以选择的动态主题。某些客户将通过第三方链接进入,该链接始终将其指向其中一个网址。
还需要在从UI到数据库的查询中使用值trade / public(根据进入站点的路径拉回不同的数据)。
那么我的选择是什么?
创建自定义视图引擎,该引擎使用查询字符串(mvc route param)值来加载相关的母版页。
在每个控制器操作中,获取参数(交易/公共等)并将其传递给数据库查询。
public ActionResult List(string siteType){
products.ListFor(siteType);
}
这里的问题是必须改变每个控制器动作以传递查询字符串值。
这也是global.asax中定义的任何必须接受参数的路由的问题。
我想知道是否有另一种方式,也许是自定义控制器基础和主机名的某种组合,例如trade.example.com,public.example.com?
答案 0 :(得分:3)
首先定义路由:
routes.MapRoute(
"Default", // Route name
"{siteType}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
然后在控制器中使用它:
RouteData.Values["siteType"]
答案 1 :(得分:2)
这个怎么样:
创建一个所有控制器都从
继承的基本控制器添加属性:public string SiteType {get;保护集; }
在调用任何操作之前添加一个OnActionExecuting方法来设置它,例如
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
//use filterContext to set SiteType somehow, e.g. you can look at the URL or the route data
}