ASP.NET MVC从不同的文件夹动态加载视图/部分视图

时间:2014-03-05 08:41:58

标签: c# asp.net asp.net-mvc asp.net-mvc-4 razor

对于实施以下方案的技术/策略的任何帮助,我将不胜感激:

我们需要拥有ASP.NET MVC 5站点的这种文件夹结构

名称是文件夹,文件名由Extentions指定。

网站文件夹结构:


    • DisplayControls
      • 产品
        • SimpleProductPage
          • SimpleProductPage.cshtml
          • 控制
            • Image.cshtml
            • ProductSpecification.cstml
        • ProductPageWithImageGallery
          • ProductPageWithImageGallery.cshtml
          • 控制
            • ImageGallery.cshtml
            • ProductSpecification.cstml
      • 类别
        • SimpleCategoryPage
          • SimpleCategoryPage.cshtml
          • 控制
            • CateogryProducts.cshtml
            • RelatedProducts.cshtml
        • CategoryPage
          • CategoryPage.cshtml
          • 控制
            • CateogryProducts.cshtml
            • RelatedProducts.cshtml
    • 控制器
      • someControllerfiles.cs
      • ProductView.cshtml
      • CategoryView.cshtml
      • SomeotherViews ......
    • OtherFilesAndFolders

现在如果我们想要请求产品页面,那么ProductView.cshtml将从Controller加载并在该视图内部,我们想要根据数据库条目从“DisplayControls”文件夹加载一些显示控件。 如果条目说我们需要加载“SimpleProductPage”然后我们将加载来自“SimpleProductPage”文件夹的视图,即SimpleProductPage.cshtml 并且此视图将具有它的控件,即从其控件文件夹加载的部分视图。如果选择的显示控件是“ProductPageWithImageGallery”,则该文件夹中的视图将与其子视图/部分视图一起加载。

类别页面也是如此,基于数据库条目,将从该文件夹中加载各自的控件/ Biew。

所以基本上ProductView.cshtml和CategoryView.cshtml将充当占位符,并且Selected Views / ChildViews将被加载到它们运行时。正如您所看到的,我们的目标视图不会位于视图文件夹中,因此对我来说这有点问题。

我是MVC的新手,我们正在使用MVC 5,你们有没有人可以帮我解决这个问题。

2 个答案:

答案 0 :(得分:1)

您需要创建自定义视图引擎,最有可能继承自Razor视图引擎,并覆盖确定查找视图位置的方法。

关于这个主题的一篇博客:

http://theshravan.net/blog/configure-the-views-search-locations-in-asp-net-mvc/

答案 1 :(得分:0)

我处理上述情况的方法是创建一个自定义视图引擎,它将从指定的文件夹结构加载视图。

希望这对某人有帮助,

谢谢大家的支持。