2011-03-29 4 views
0

사용자가 드롭 다운 목록에서 해당 사이트의 테마를 선택할 수 있고 테마가 해당 페이지 [atleast]에 적용되는 옵션을 갖고 싶습니다.asp.net mvc 2에서 테마를 변경하는 방법

프레임 워크와 같은 jquery를 사용하지 않고 ASP.NET MVC 2에서이 작업을 수행하고 싶습니다.

어떻게 수행 할 수 있습니까?

저는 기본 webforms viewengine을 사용하고 있습니다. donot은 이러한 목적으로 사용자 정의 뷰 엔진을 원합니다.

답변

3

그것은이 상자에서 지원되지 않는 것 같습니다, 그러나 여기에서 나는 테마 구현하기 위해 무슨 짓을했는지 :

먼저, 내 프로젝트에 App_Themes 폴더를 추가, 테마의 부부를 설정 enter image description here

나는 다음 가능한 한 가까운 웹 양식 프로필 공급자를 시도하고 모방하기로 결정하고, Web.config의에 프로필 속성을 추가 : 그래서

<profile> 
    <properties> 
    <add name="ThemePreference" type="string" defaultValue="Blue" /> 
    </properties> 
</profile> 

을, 기본적으로 내가하고 싶었던 것은 할 수 있었다 appropr에서 다른 CSS를로드하십시오. 주제가 바뀌면 테마 폴더를 만들 수 있습니다. 없음/Site.css 경우를

<link href="@Url.Theme("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 

이 후 적절한 테마 Site.css로드하고 ~/내용으로 후퇴해야한다 : 나는 쓸 수 있도록 내가 UrlHelper 클래스에 부착 된 도우미 메서드를 구현하여 이런 짓을 파일을 찾았습니다. 단순히 기본 값을 가져옵니다 코드의 버전에서 지금

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 세션 값을 발견하고 요청 내용에 대한 적절한 URL을 returnes 확인이 방법의 리턴 라인, 대신 프로필의 그것을 세션을 사용하여 단순히 App_Theme 접두사없이 요청 된대로 콘텐츠를 반환합니다. 드롭 다운 postmethod에 대한 controlleraction에서

, 당신은 간단 할 거라고 :

Session.Add("ThemePreference", whateverValueYouGotFromDropdown); 

업데이트를 일부 조정하고 고정으로

,이 트릭을 할해야을 종료합니다. 내가 URL의 테마 이름을 기반으로 테마를 변경해야 할 것 같다 당신의 아이디어에 따라 경찰 :

은 그것이 완전한 연습 :

+0

@Nilsen 아니더라도 일부를 도움이되기를 바랍니다. 테마를 선택하면 뷰 데이터에 테마 이름을 설정하고 뷰 파일에서이 값을 사용하여 테마가 변경 될 수 있도록 페이지에서 드롭 다운을 사용할 수 없습니다. 이건 좋은 연습 이니?. 내 프로젝트는 URL에 테마 이름을 갖고 싶지 않기 때문에 .. – Saravanan

+0

글쎄, 실제 App_Themes URL에 대한 과정을 제외하고는 내 코드의 URL에 대한 참조가 없지만 출처를 조사하지 않는 한 사용자에게 URL이 제공되지 않습니다. 세션에 테마 이름의 값을 저장하거나 로그인 한 사용자 (인증하는 경우)의 일부 속성에 값을 저장 한 다음 거기에서 검색 할 수 있습니다. 여기에있는 키 코드는 UrlHelpers 클래스에서 settingsProperty를 검색합니다. 대신 세션을 사용하도록 쉽게 변경할 수 있습니다. 내 대답을 예제로 업데이트하겠습니다. –

+0

거기 가서. 마지막으로 업데이트 된 코드는 테스트를 실행하지 않고 작성되었지만 예상대로 작동해야합니다. –

관련 문제