Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.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 动态母版页声明-ASP.NET MVC_Asp.net Mvc_Themes - Fatal编程技术网

Asp.net mvc 动态母版页声明-ASP.NET MVC

Asp.net mvc 动态母版页声明-ASP.NET MVC,asp.net-mvc,themes,Asp.net Mvc,Themes,我正在尝试为我的asp.net mvc应用程序创建主题系统 我能够创建一个自定义视图引擎和一个自定义控制器类来更改视图的输出方式 我的问题是母版。有没有办法做到以下几点: 这是视图的@Page指令 <%@ Page Title="" Language="C#" MasterPageFile="<%= ViewData["myThemeFolder"] + "/Views/Shared/Site.Master" %>" Inherits="System.Web.Mvc.Vi

我正在尝试为我的asp.net mvc应用程序创建主题系统

我能够创建一个自定义视图引擎和一个自定义控制器类来更改视图的输出方式

我的问题是母版。有没有办法做到以下几点: 这是视图的@Page指令

<%@ Page Title="" Language="C#" 
MasterPageFile="<%= ViewData["myThemeFolder"] + "/Views/Shared/Site.Master"  %>" 
Inherits="System.Web.Mvc.ViewPage" %>


我试过这么做,但没用。我很想做到这一点,但不知道如何做到。

您需要做的是将MasterPageFile属性设置为一个“基本”主控,该主控上有一组“标准”的内容控件

然后从控制器中动态选择主控制器:

return View(viewName, masterName, modelObject);
您无法在视图中处理此问题,因为视图的这一部分不知道ViewData是什么,等等。它几乎是一个预处理器指令

无论如何,您可以执行以下操作之一:

1) 在基本控制器实现中添加一个ThemedView(或任何您希望调用的)方法,然后返回该方法,而不是返回View(),以返回ViewResults

2) 创建自定义ActionFilterAttribute以动态交换母版页


无论哪种方式,你要么使用新方法,要么用ActionFilterAttribute装饰东西。

我最后用样式表替换来制作主题。我正在使用jQueryUI和ThemeRoller中的相关主题。您可能需要考虑这样做或做类似的事情,以替代更改母版页。你可以在我的网站上找到更多关于我是如何做到这一点的信息,我写了一个jQuery插件,它允许人们通过选择不同的主题样式表来改变主题。

我不太清楚你的意思。我不想为我生成的每个视图都明确地键入主名称。我的基本控制器类设置ViewData[“myThemeFolder”],因此我希望它自动设置MasterPage,这将是处理它的“更优雅”的方式。比如在基类中创建一个在母版页名称中打孔的主题视图方法。如果我采用这种方法,我需要在大约50-60个操作中使用它,这对于我所需要的不是很可行。如果我能够在@Page指令中使用视图数据,一切都会好起来。我希望对模板有更多的控制,而不是完全使用css来设置样式。