我想要一個選項,其中用戶可以從下拉列表中選擇他的主題並將主題應用於該頁面[atleast]。如何更改asp.net中的主題mvc 2
我想要在ASP.NET MVC 2中完成而不使用類似框架的jQuery。
這是如何完成的。
我使用默認的webforms viewengine,並且不想爲此目的去定製viewengine。
我想要一個選項,其中用戶可以從下拉列表中選擇他的主題並將主題應用於該頁面[atleast]。如何更改asp.net中的主題mvc 2
我想要在ASP.NET MVC 2中完成而不使用類似框架的jQuery。
這是如何完成的。
我使用默認的webforms viewengine,並且不想爲此目的去定製viewengine。
看來這是不支持開箱即用,但在這裏我就是這樣做來實現主題化:
首先,我加入了App_Themes文件夾到我的項目,併成立了幾個主題
然後我決定嘗試模仿web的表單配置文件提供儘可能接近,並且加入了輪廓屬性的web.config:
<profile>
<properties>
<add name="ThemePreference" type="string" defaultValue="Blue" />
</properties>
</profile>
所以,基本上我想要做的是能從appropr加載不同的CSS當主題改變時,iate主題 - 文件夾。我這樣做是通過實現連接到UrlHelper類的幫助方法,這樣我可以這樣寫:
<link href="@Url.Theme("~/Content/Site.css")" rel="stylesheet" type="text/css" />
這應該然後加載相應主題的site.css,並回落到〜/內容/的site.css如果沒有文件被找到。
助手很簡單:
public static class UrlHelpers
{
public static string Theme(this UrlHelper url, string u)
{
if (u.StartsWith("~")) u = u.TrimStart('~');
SettingsProperty settingsProperty = ProfileBase.Properties["ThemePreference"];
return url.Content("~/App_Themes/"+settingsProperty.DefaultValue + u);
}
}
現在,在這個版本中它只是得到默認值的代碼,所以你需要稍微調整代碼。但正如您所看到的,這不僅限於css文件,還適用於從.master文件到圖像的所有內容。
更新 - 使用會話,而不是曲線
public static class UrlHelpers
{
public static string Theme(this UrlHelper url, string u)
{
if (u.StartsWith("~")) u = u.TrimStart('~');
object currentThemeName = null;
if (url.RequestContext.HttpContext.Session != null)
{
currentThemeName = url.RequestContext.HttpContext.Session["ThemePreference"];
}
return currentThemeName != null ? url.Content(String.Format("~/App_Themes/{0}{1}", currentThemeName, u)) : url.Content("~"+u);
}
}
的返回線路在此方法中檢驗它是否找到了一個ThemePreference會話值,然後returnes所請求的內容相應的URL,否則只需返回內容,因爲它沒有App_Theme前綴。
在你controlleraction爲下拉的PostMethod,你會簡單地做:
Session.Add("ThemePreference", whateverValueYouGotFromDropdown);
更新結束
有了一些調整和固定,這應該做的伎倆。
希望它可以幫助一些,儘管它不是一個完整的演練:)
@Nilsen:按照你的想法,看來我不得不改變基於URL的主題名稱的主題。我無法在頁面中使用下拉菜單,因此當選擇主題時,我可以在viewdata中設置主題名稱,並在視圖文件中使用此值,以便更改主題。這是一個好習慣嗎?由於我的項目不想在URL中包含主題名稱.. – Saravanan 2011-03-30 03:47:00
嗯,我的代碼中沒有任何URL的引用,除了當然實際的App_Themes網址,但除非用戶檢查源代碼,否則用戶將永遠不會看到這些URL。 您可以在會話或登錄用戶的某個屬性中存儲主題名稱的值(如果您正在進行身份驗證),然後從此處檢索它。此處的關鍵代碼位於UrlHelpers-class中,您可以在其中檢索settingsProperty。您可以輕鬆地將其改爲使用會話。我會用一個例子更新我的答案。 – 2011-03-30 06:37:58
你去了。最後更新的代碼是在沒有運行任何測試的情況下編寫的,但它應該在所有的意義上工作,就像你期望的那樣:) – 2011-03-30 06:45:14