【发布时间】: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
- SimpleCategoryPage
- 产品
- 控制器
- 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