我正在为不同的品牌合作伙伴开发MVC应用程序,不同的品牌合作伙伴有不同的外观和感觉,但所有品牌合作伙伴都在做同样的功能,例如登录,搜索策略和显示策略详细信息。
那么如何为不同的品牌合作伙伴构建通用/可重用控制器?
我知道我可以使用控制器工厂,但我不知道该怎么做。
答案 0 :(得分:4)
您可以在一个操作中调用不同的视图。 实现可能如下所示:
public class SomeController : Controller
{
public ViewResult SomeAction(PartnerType partnerType)
// note: PartnerType could be anything you need
// enum, string, int
// also you may register your ModelBinder
// and determinate value per request
{
// ... your logic
var viewName = "";
switch(partnerType)
{
case: partner1
viewName = "ViewForPartner1";
break;
case: partner2
viewName = "ViewForPartner2";
break;
// other cases...
default:
viewName = "DefaultView";
break;
}
return View(viewName, model);
}
}
另外还有一种更复杂的方法,但每次都没有创建视图名称切换,这将有助于为您的应用构建单独的架构。
您需要注册自己的ViewEngine。 Here是如何做到这一点的一个很好的例子。然后创建自己的模式如何保存视图。我会这样做:
~/Views/%1/{1}/{0}
其中%1是为您的合作伙伴保存视图的文件夹的名称。结构将如下所示:
~/Views/FolderForPartner1/SomeController/SomeAction
~/Views/FolderForPartner2/SomeController/SomeAction
~/Views/FolderForPartner3/SomeController/SomeAction
覆盖“CreatePartialView”,“CreateView”和“FileExists”以替换当前合作伙伴的“%1”视图文件夹名称。您可以访问ControllerContext,以传递parther Id(Name,Type)。每次控制器调用视图时,引擎都会获取您需要的确切视图。