我正在開發一個基於體育的網站Asp.Net Mvc 4。在Asp.Net Mvc中使用類似的控制器
該網站正在開發中,一次只顯示一項運動數據。
體育運動有類似的數據共同點,但他們有不同的數據。
網站支持許多運動,這就是爲什麼,我不希望通過if語句分開運動來使用通用控制器/視圖。
我試過這個:
我爲每項運動創建了一個區域。我在與該運動有關的區域描述了控制器。
例如,在Route中,將聲明控制器和區域的名稱,首先將在區域中進行搜索,如果不存在,則默認搜索(/Controllers
)。
由於控制器共享相同的名稱,Mvc DefaultControllerfactory引發「模糊控制器名稱異常」。首先,我正在尋找區域,如果找不到,那麼通過編寫我自己的控制器工廠,我正在默認搜索。你可以通過這個幫助來達到這個項目link
在這種情況下,我最大的缺陷是;而不會在路徑中指示命名空間在視圖中做同樣的事情。所以它會搜索區域中的視圖,如果它不會被發現,那麼它會默認搜索。由於該項目支持主題,因此我使用自己的可變剃鬚刀視圖引擎,而不是默認的剃鬚刀視圖引擎。它可以通過這個link
base.AreaViewLocationFormats = new[]
{
_themeService.Current.BasePath + "/Views/Areas/{2}/{1}/{0}.cshtml",
_themeService.Current.BasePath + "/Views/{1}/{0}.cshtml",
_themeService.Current.BasePath + "/Views/Shared/{0}.cshtml","~/Themes/Default/Views/{1}/{0}.cshtml"
};
的幫助下達到我更新AreaViewLocationFormats
的RazorViewEngine的對象喜歡這一點,但不管事實是,在路線我州地區,它搜索ViewLocationFormats
,而不是AreaViewLocationFormats
如果我這樣做不是狀態名稱空間。
在這種情況下,我應該如何區分運動?
你爲什麼不只是有不同類型的運動(例如「足球」,「網球」等)的桌子。那麼你的行動可能會採取一種運動類型的參數並返回適當的觀點? –
我試圖找出哪個控制器實例化時,mvc DefaultControllerFactory引發異常,可能值得看看多租戶類似autofac http://code.google.com/p/autofac/wiki/MultitenantIntegration –
@DanielPowell,因爲我不想爲控制器使用一個Assembly,所以我需要common(/ Controllers)。 – Onuralp