Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc Sitecore MVC-动态视图位置_Asp.net Mvc_Sitecore_Sitecore6_Sitecore Mvc - Fatal编程技术网

Asp.net mvc Sitecore MVC-动态视图位置

Asp.net mvc Sitecore MVC-动态视图位置,asp.net-mvc,sitecore,sitecore6,sitecore-mvc,Asp.net Mvc,Sitecore,Sitecore6,Sitecore Mvc,我有一个需要“主题”功能的网站。因此,我在“主题”文件夹中创建了一组视图。例如: /Themes/Theme 1/Views/Content.cshtml /Themes/Theme 1/Views/Menu.cshtml /Themes/Theme 2/Views/Content.cshtml /Themes/Theme 2/Views/Menu.cshtml /Themes/Theme 3/Views/Content.cshtml /Themes/Theme 3/Views/Menu.csh

我有一个需要“主题”功能的网站。因此,我在“主题”文件夹中创建了一组视图。例如:

/Themes/Theme 1/Views/Content.cshtml
/Themes/Theme 1/Views/Menu.cshtml
/Themes/Theme 2/Views/Content.cshtml
/Themes/Theme 2/Views/Menu.cshtml
/Themes/Theme 3/Views/Content.cshtml
/Themes/Theme 3/Views/Menu.cshtml
我还创建了
内容
菜单
视图渲染,并将
路径
字段分别设置为
/Themes/Theme 1/Views/Content.cshtml
/Themes/Theme 1/Views/Menu.cshtml

我需要的是在sitecore管道的某个地方将“主题1”替换为“主题2”,这样我就可以全局设置主题并动态加载与该主题对应的视图(而不是创建多个“菜单”和“内容”视图渲染)


有没有办法做到这一点?

所以,我就是这么做的:

创建一个类来处理
渲染过程
管道过程:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Sitecore.Diagnostics;
using Sitecore.Caching;
using Sitecore.Mvc.Extensions;
using Sitecore.Mvc.Presentation;
using Sitecore.Sites;

namespace MyNamespace.Pipelines.Response.RenderRendering
{
    public class ReplacePathProcessor : Sitecore.Mvc.Pipelines.Response.RenderRendering.RenderRenderingProcessor
    {
        public override void Process(Sitecore.Mvc.Pipelines.Response.RenderRendering.RenderRenderingArgs args)
        {
            var viewRenderer = args.Rendering.Renderer as ViewRenderer;
            if (viewRenderer != null && viewRenderer.ViewPath.StartsWith("%Theme%"))
            {
                // Get the current site
                var site = Sitecore.Context.Site;
                // Get the master database
                var database = Sitecore.Data.Database.GetDatabase("master");
                // Get the root item
                var rootItem = database.GetItem(site.RootPath);
                // replace the path
                viewRenderer.ViewPath = viewRenderer.ViewPath.Replace("%Theme%", rootItem["Theme"]);
            }
        }
    }
}
添加一个配置,包括

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <pipelines>
      <mvc.renderRendering>
        <processor type="MyNamespace.Pipelines.Response.RenderRendering.ReplacePathProcessor, __Code">
          <patch:attribute name="type">MyNamespace.Pipelines.Response.RenderRendering.ReplacePathProcessor, __Code</patch:attribute>
        </processor>
      </mvc.renderRendering>
    </pipelines>
  </sitecore>
</configuration>

MyNamespace.Pipelines.Response.RenderRendering.ReplacePathProcessor,\uu代码
MvcSettings.rendersviewfolder
更改为:

将所有“我的视图”的
ViewPath
字段更改为使用以下格式:
%Theme%/Views/{ViewName}.cshtml


希望这能帮助到别人。

所以,我就是这么做的:

创建一个类来处理
渲染过程
管道过程:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Sitecore.Diagnostics;
using Sitecore.Caching;
using Sitecore.Mvc.Extensions;
using Sitecore.Mvc.Presentation;
using Sitecore.Sites;

namespace MyNamespace.Pipelines.Response.RenderRendering
{
    public class ReplacePathProcessor : Sitecore.Mvc.Pipelines.Response.RenderRendering.RenderRenderingProcessor
    {
        public override void Process(Sitecore.Mvc.Pipelines.Response.RenderRendering.RenderRenderingArgs args)
        {
            var viewRenderer = args.Rendering.Renderer as ViewRenderer;
            if (viewRenderer != null && viewRenderer.ViewPath.StartsWith("%Theme%"))
            {
                // Get the current site
                var site = Sitecore.Context.Site;
                // Get the master database
                var database = Sitecore.Data.Database.GetDatabase("master");
                // Get the root item
                var rootItem = database.GetItem(site.RootPath);
                // replace the path
                viewRenderer.ViewPath = viewRenderer.ViewPath.Replace("%Theme%", rootItem["Theme"]);
            }
        }
    }
}
添加一个配置,包括

<configuration xmlns:patch="http://www.sitecore.net/xmlconfig/">
  <sitecore>
    <pipelines>
      <mvc.renderRendering>
        <processor type="MyNamespace.Pipelines.Response.RenderRendering.ReplacePathProcessor, __Code">
          <patch:attribute name="type">MyNamespace.Pipelines.Response.RenderRendering.ReplacePathProcessor, __Code</patch:attribute>
        </processor>
      </mvc.renderRendering>
    </pipelines>
  </sitecore>
</configuration>

MyNamespace.Pipelines.Response.RenderRendering.ReplacePathProcessor,\uu代码
MvcSettings.rendersviewfolder
更改为:

将所有“我的视图”的
ViewPath
字段更改为使用以下格式:
%Theme%/Views/{ViewName}.cshtml

希望这能帮助别人