4

我正在使用Asp.Net Mvc 4开发一个基于运动的网站。

该网站正在开发中,一次只显示一项运动数据。

这些运动有相似的数据,但也有不同的数据。

站点支持许多运动,这就是为什么,我不想通过使用 if 语句分隔运动来使用通用控制器/视图。

我试过这个:

我为每项运动创建了一个区域。我描述了与该运动相关的区域中的控制器。

例如Route中会写明控制器名称和区域,首先在区域中搜索,如果不存在则在default( /Controllers)中搜索。

因为控制器共享相同的名称,所以 Mvc DefaultControllerfactory 会抛出“Ambiguous Controller Name Exception”。首先,我正在搜索区域,如果找不到,则默认通过编写自己的控制器工厂进行搜索。您可以通过此链接访问该项目

在这种情况下,我最大的不足是;没有在路线中指示名称空间,在视图中制作相同的东西。所以它会在区域内搜索视图,如果找不到则默认搜索。因为该项目是主题支持的,所以我使用自己的主题剃须刀视图引擎,而不是默认的剃须刀视图引擎。可以通过这个链接到达

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

我像这样更新了 RazorViewEngine 的对象,AreaViewLocationFormats不管我在路由中声明区域的事实,它都会搜索ViewLocationFormats而不是AreaViewLocationFormats如果我没有声明命名空间。

在这种情况下,我应该如何分开运动?

4

1 回答 1

1

我在类似场景中所做的是创建一个基本的通用控制器,如下所示:

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>
{
}
于 2013-07-31T15:40:30.527 回答