【问题标题】:ASP.NET MVC Load Views / Partial Views Dynamically from Different FolderASP.NET MVC 从不同文件夹动态加载视图/部分视图
【发布时间】:2018-01-26 14:52:47
【问题描述】:

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

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

名称是文件夹,文件名使用扩展名指定。

网站文件夹结构:


    • 显示控件
      • 产品
        • 简单产品页面
          • SimpleProductPage.cshtml
          • 控件
            • Image.cshtml
            • ProductSpecification.cstml
        • ProductPageWithImageGallery
          • ProductPageWithImageGallery.cshtml
          • 控件
            • ImageGallery.cshtml
            • ProductSpecification.cstml
      • 类别
        • SimpleCategoryPage
          • SimpleCategoryPage.cshtml
          • 控件
            • CateogryProducts.cshtml
            • RelatedProducts.cshtml
        • 分类页面
          • CategoryPage.cshtml
          • 控件
            • CateogryProducts.cshtml
            • RelatedProducts.cshtml
    • 控制器
      • someControllerfiles.cs
    • 查看次数
      • ProductView.cshtml
      • CategoryView.cshtml
      • SomeotherViews......
    • 其他文件和文件夹

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

类别页面也是如此,根据 DB 条目,将从该文件夹加载相应的 Controls/Biews。

所以基本上 ProductView.cshtml 和 CategoryView.cshtml 将充当占位符,并且选定的视图/子视图将在运行时加载到它们上。如您所见,我们的目标视图不在视图文件夹中,所以这对我来说有点问题。

我是 MVC 新手,我们正在使用 MVC 5,请大家帮我看看如何实现它。

【问题讨论】:

  • MVC.net 使用命名约定来加载视图,以便在访问前端页面时完全清楚这些视图的来源,而无需开发人员在代码中寻找用于查找的逻辑加载视图。您的建议是规避此功能,因此您可能需要在实施之前考虑这一点。但是,是的,您可以实现自定义 RazorViewEngine 来执行此操作
  • 您可以像 return View("~/folder/viewname.cshtml") 一样提供要加载的视图的位置,或者创建自己的 Editor 模板。您可以使用MVC Areas 来保持文件夹结构
  • @Murali 我将尝试执行基于文件夹的位置参数。您能否建议区域如何提供帮助,因为我认为区域可用于分离应用程序,例如 /Admin 或 /Support,我希望我说清楚了。

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


【解决方案1】:

您需要创建一个自定义视图引擎,很可能继承自 Razor 视图引擎,并重写一个确定在何处查找视图的方法。

关于该主题的一篇博客:

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

【讨论】:

  • 请尽可能在答案中提供相关代码。指向外部网站的链接不太可能继续存在以帮助将来遇到同样问题的任何人
  • @RGraham,@ps2goat 我不知道是否可以有效地创建视图引擎,因为我是 MVC 的新手,但我会努力的。
  • @RGraham,确实如此,但如果我付出了很多努力,并且非常详细,我不会抄袭某人的代码。
  • 这不是抄袭。发布代码链接
【解决方案2】:

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

希望这对某人有所帮助,

感谢大家的支持。

【讨论】:

    猜你喜欢
    • 2011-05-31
    • 2022-10-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 2017-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多