asp.net-mvc-5 - ASP.NET MVC 5 自定义 RazorViewEngine 用于多个门户结构

标签 asp.net-mvc-5 asp.net-core-mvc razorengine onion-architecture directory-structure

我按类别设置 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/

相关文章:

javascript - 使用 AJAX 结果更新 DisplayFor Date

c# - 复杂对象和模型绑定(bind)器 ASP.NET MVC

authentication - MicrosoftAccount、AzureAD 和 OpenIdConnect 身份验证之间有什么区别?

c# - ASP.NET Core 1.0 中的单元测试路由(前 MVC 6)

mysql - 使用 Pomelo Entity Framework Core 查询 MySQL 数据库时出现问题

c# - 如何使用 RazorEngine 将 System.Text.RegularExpressions 添加到模板?

asp.net-mvc - 使用缩小的 JS 和 CSS 的公共(public)条件 Razor View

javascript - 如何在 asp.net web 应用程序中使用 razor 制作侧导航栏

c# - Controller和View之间的抽象层

c# - MVC 5 自定义 ViewEngine 加载外部 Controller 和 View