2009-10-29 83 views
1

我們需要根據進入站點的「路由」呈現相同的站點,並使用不同的主題(以及不同的數據)。ASP.NET MVC路由所有請求

  • www.example.com/Trade
  • www.example.com/Public

注意:這些都不是動態主題,用戶可以從中挑選。某些客戶將通過第三方鏈接進入,該鏈接始終將其指向其中一個網址。

交易/公共值也需要用於從用戶界面到數據庫的查詢(根據進入站點的路線撤回不同的數據)。

那麼我有什麼選擇?

創建使用查詢字符串(mvc路徑參數)值加載相關母版頁的自定義視圖引擎。

在每個控制器操作中,抓取參數(trade/public等)並將其傳遞給數據庫查詢。

public ActionResult List(string siteType){ 
    products.ListFor(siteType); 
} 

這裏的問題是不得不改變每一個控制器動作來傳遞查詢字符串值。

這也提出了global.asax中定義的任何路由必須接受參數的問題。

我想知道是否有另一種方式,可能是自定義控制器基礎和主機名的一些組合,例如trade.example.com,public.example.com?

回答

3

首先定義路由:

routes.MapRoute(
      "Default", // Route name 
      "{siteType}", // URL with parameters 
      new { controller = "Home", action = "Index", id = "" } // Parameter defaults 
     ); 

,然後在控制器使用它:

RouteData.Values["siteType"] 
+0

結合定製的基本控制器使用這個檢索值的伎倆!謝謝您的幫助 – 2009-11-20 08:42:40

2

如何:

創建基礎控制器,所有的控制器繼承

添加一個屬性:公共字符串SiteType {獲得;保護組; }

添加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 
}