簡體   English   中英

在Asp.Net Mvc中的區域中使用類似的控制器

[英]Using similar Controllers in areas in Asp.Net Mvc

我正在使用Asp.Net Mvc 4開發一個基於運動的網站。

該網站正在開發中,一次只顯示一個運動數據。

這些運動有相似的數據,但也有不同的數據。

網站支持許多運動,這就是為什么,我不想通過使用if語句分隔運動來使用通用控制器/視圖。

我試過這個:

我為每項運動創造了一個區域。 我描述了與該運動相關的區域控制器。

例如,在Route中,將聲明控制器的名稱和區域,首先它將在區域中搜索,如果不存在,將在默認情況下搜索( /Controllers )。

因為控制器共享相同的名稱,Mvc DefaultControllerfactory會拋出“不明確的控制器名稱異常”。 首先,我正在搜索區域,如果找不到,那么我正在搜索默認情況下編寫自己的控制器工廠。 您可以借助此鏈接訪問該項目

在這種情況下,我最大的不足是; 沒有在路由中指明命名空間在視圖中做同樣的事情。 因此它將搜索區域中的視圖,如果找不到它,則它將默認搜索。 因為該項目是主題支持的,我使用自己的可變剃刀視圖引擎,而不是默認的剃刀視圖引擎。 可以通過此鏈接訪問它

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"
};

我像這樣更新了AreaViewLocationFormatsAreaViewLocationFormats的對象,但不管我在路由中的狀態區域,如果我沒有聲明命名空間,它會搜索ViewLocationFormats而不是AreaViewLocationFormats

在這種情況下,我應該如何分開運動?

我在類似場景中所做的是創建一個這樣的基礎通用控制器:

public abstract class BaseController<TModel> : Controller where TModel : class, new()
{
   // Controller Actions to be shared by all the controllers that inherit form this one...
}

然后,你的控制器將是這樣的:

public class TennisController : BaseController<Tennis>
{
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM