我按类别设置 MVC 5 站点,然后每个类别中的 Controller 、模型、 View 子文件夹,即根文件夹文件夹\Home 和\Products 将包含这三个子文件夹以及根\Shared\Views文件夹。我关注了一篇很棒的文章,我的 Matthew Renz,Clean Architecture in ASP.NET MVC 5 。部分通过创建自定义 RazorViewEngine 完成,具体来说:
public CustomRazorViewEngine()
{
ViewLocationFormats = new string[]
{
"~/{1}/Views/{0}.cshtml",
};
PartialViewLocationFormats = new string[]
{
"~/Shared/Views/{0}.cshtml"
};
}
除此之外没有太多变化。我想知道是否可以基于这个想法,并使用一些标识符(名称或数字)为每个门户设置一个带有\Portals 根文件夹和子文件夹的网站项目 - 类似于 DNN。对自定义 razor View 引擎代码的更改可能类似于:
public CustomRazorViewEngine()
{
ViewLocationFormats = new string[]
{
"~/Portals/{2}/{1}/Views/{0}.cshtml",
};
PartialViewLocationFormats = new string[]
{
"~/Portals/{2}/Shared/Views/{0}.cshtml"
};
}
但是,我不确定值 {0} 和 {1} 从何而来。我可以找到一种获取门户网站名称{2}的方法。网站其余部分的相对路径,例如\Content、\Scripts 等。我相信我可以自己构建。
此方法的目的是向客户提供一个解决方案,其中可以重用通用代码来支持许多具有独特外观和功能的门户。感谢您的时间和考虑,如果您有任何疑问,请告诉我。
约翰
最佳答案
这些是字符串中的占位符, Controller 可使用它们将区域名称、 Controller 名称或操作名称放入字符串中。 {2} 是区域,{1} 是 Controller ,{0} 是操作。
您可能还想知道,使用 Asp.Net Core 时,可以轻松地让标准 Razor View 引擎通过 ViewLocationExpander
在自定义位置中定位 View 等,而不需要创建一个继承自 Razor View Engine 的新 View 引擎。我只是提到这一点,因为您在问题上添加了 asp.net-core-mvc 标签。
这是一个堆栈溢出答案,展示了如何: How to specify the view location in asp.net core mvc when using custom locations?
关于asp.net-mvc-5 - ASP.NET MVC 5 自定义 RazorViewEngine 用于多个门户结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41963515/