加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 在Asp.Net Mvc中的区域中使用类似的控制器

发布时间:2020-12-15 21:54:07 所属栏目:百科 来源:网络整理
导读:我正在开发一个拥有 Asp.Net Mvc 4的运动网站. 该网站正在开发中,一次只显示一个运动数据. 这些运动有相似的数据,但也有不同的数据. 网站支持许多运动,这就是为什么,我不想通过使用if语句分隔运动来使用通用控制器/视图. 我试过这个: 我为每项运动创造了一
我正在开发一个拥有 Asp.Net Mvc 4的运动网站.

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

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

网站支持许多运动,这就是为什么,我不想通过使用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"
};

我像这样更新了RazorViewEngine的AreaViewLocationFormats的对象,但不管我在路由中的状态区域,如果我没有声明命名空间,它会搜索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>
{
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读