2009-09-18 95 views
0

我正在嘗試爲我的asp.net mvc應用程序創建主題系統。動態主頁面聲明 - ASP.NET MVC

我能夠創建自定義視圖引擎和自定義控制器類來更改輸出視圖的方式。

我的問題是masterpages。有沒有辦法做到這一點如下: 這是視圖

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

我想這樣做的@Page指令,但它不工作。我想做到這一點,但不知道如何。

回答

0

我最終做了使用樣式表替換的主題。我使用ThemeRoller中的jQuery UI和相關主題。你可能想要考慮做這個或類似的東西來替代主頁面。你可以在我的blog上找到更多關於我如何做到這一點的信息,在那裏我寫了一個關於我使用的jQuery插件來允許人們通過選擇不同的主題樣式表來改變主題。

+0

我想對模板有更多的控制權,而不是完全用CSS來設計。 – Omar 2009-09-18 19:20:47

0

您需要做的是將MasterPageFile屬性設置爲具有「標準」內容控件集的「基礎」主控。

然後動態地從你的控制器選擇主:

return View(viewName, masterName, modelObject); 

在視圖您不能處理這一點,因爲認爲部分沒有任何線索ViewData的是,等,這是相當很多預處理指令。

總之,你可以做的是下列之一:

1)添加ThemedView(或任何你想將它命名)方法在你的基地控制器實現,然後返回,而不是查看()到返回您的ViewResults。

2)創建一個自定義ActionFilterAttribute動態交換母版頁。

無論採用哪種方式,您都必須使用新方法或使用ActionFilterAttribute裝飾事物。

+0

我不確定你的意思。我不想爲我生成的每個視圖輸入mastername。我的基礎控制器類設置ViewData [「myThemeFolder」],所以我希望它自動設置主頁 – Omar 2009-09-18 19:05:51

+0

這將是「更優雅」的方式來處理它。就像在母版頁名稱中打孔的基類中創建一個ThemedView方法一樣。 – 2009-09-18 19:21:44

+0

如果我採取這種方法,我需要它約50-60行動,不是我所需要的非常可行。如果我能夠在@Page指令中使用視圖數據,一切都會好的。 – Omar 2009-09-18 21:09:17