Ada*_*sey 1 architecture asp.net-mvc-2
我们正在使用ASP.NET MVC构建一个封闭的系统.此演示系统中有多个接触点,但所有接触点都将运行浏览器.所有都将显示基本相同的数据,但目标在几个方面有所不同:
我的问题是:我应该为每个目标类型和页面创建一个单独的控制器,还是控制器应该以某种方式解释哪个目标类型并提供适当的视图?例如,我应该这样做:
TargetType1AccountController
TargetType1HomeController
TargetType2AccountController
TargetType2HomeController
或这个:
AccountController/TargetType1View
AccountController/TargetType2View
HomeController/TargetType1View
HomeController/TargetType2View
我建议你编写一个自定义视图引擎.这样你的结构可能如下所示:
然后有一个自定义视图引擎:
public class CustomViewEngine : WebFormViewEngine
{
public override ViewEngineResult FindView(ControllerContext controllerContext, string viewName, string masterName, bool useCache)
{
string ua = controllerContext.HttpContext.Request.UserAgent;
if (ua == "UA String 1")
{
return base.FindView(controllerContext, "UA1/" + viewName, masterName, useCache);
}
if (ua == "UA String 2")
{
return base.FindView(controllerContext, "UA2/" + viewName, masterName, useCache);
}
return base.FindView(controllerContext, viewName, masterName, useCache);
}
}
Run Code Online (Sandbox Code Playgroud)
最后注册视图引擎Application_Start:
ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new CustomViewEngine());
Run Code Online (Sandbox Code Playgroud)
这样,您的控制器和操作完全相同,并且基于User-AgentHTTP标头将使用正确的视图.您需要处理的所有操作UA3都是在UA3文件夹中添加相应的视图.无需触摸控制器和型号.