用于不同前端的可重用/通用MVC控制器

时间:2014-11-13 20:51:54

标签: asp.net-mvc asp.net-mvc-4 model-view-controller asp.net-mvc-5

我正在为不同的品牌合作伙伴开发MVC应用程序,不同的品牌合作伙伴有不同的外观和感觉,但所有品牌合作伙伴都在做同样的功能,例如登录,搜索策略和显示策略详细信息。

那么如何为不同的品牌合作伙伴构建通用/可重用控制器?

我知道我可以使用控制器工厂,但我不知道该怎么做。

1 个答案:

答案 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)。每次控制器调用视图时,引擎都会获取您需要的确切视图。