2011-02-25 5 views
1

문제점 : 모든 뷰가 공통 마스터 페이지를 사용하는 MVC3 응용 프로그램이 있습니다. 마스터 페이지에는 다른 (내부) 사이트에 대한 많은 링크가 있습니다. 배포 환경에 따라 이러한 링크의 도메인을 변경할 수 있어야합니다 (예 : staging.blah.com, www.blah.com, dev.blah.com 등). 이 도메인은 web.config에 저장됩니다.asp.net mvc 마스터 페이지의 구성 설정을 사용하는 기본 방법

이렇게하는 방법에는 여러 가지가 있지만 선호하는 방법에 관해서는 일종의 공감대를 찾고 있습니다. 다음은 몇 가지 옵션이지만 어떤 제안이든 열려 있습니다.

(1) 마스터 페이지에서 직접 참조 설정. 이것은 가장 간단하고 가장 일반적인 접근법이지만 web.config를 읽고 마스터 페이지 코드 전체에 걸쳐 URL을 연결하는 데 특히 신경 쓰지는 않습니다. 사실, web.config에 액세스하는보기의 아이디어가 마음에 들지는 않습니다.

(2) config를 읽는 사용자 지정 작업 필터를 사용하여 viewdata/viewbag에 appsetting 값을 저장하십시오. 이전과 같이 페이지에서 연결하십시오.

(3)을 (2)와 같이 사용하지만 필터 내에서 값을 읽는 대신 컨텍스트 주입을 통해 appsetting 값을 주입합니다.

(4) 강력하게 유형이 지정된 모든보기 모델에 대한 기본 클래스를 만들고 사용자 지정 동작 필터를 사용하여 appsetting을 채 웁니다.

(5) 경로를 가져 와서 appsetting을 읽고 내부적으로 읽는 htmlhelper를 만듭니다.

(6) 사용자 정의보기 기본 클래스를 만들고 appsetting 값을 삽입하고 경로 및 연결을 가져 오는 속성이나 기능으로 사용 가능하게 만듭니다.

일반적으로 마스터 페이지에 데이터가 필요한 경우 Html.Action을 사용하고 싶지만 마스터 페이지 전체에서 사용되는 이러한 URL의 경우에는 불가능합니다.

생각하십니까?

+0

가 TFG : 사용자 정의 HTML 도우미는 다음과 같이 볼 수 있습니다 :

<%= Html.ExternalActionLink( "link text", new { path = "/foo/bar.php" } new { param1 = "value1", param2 = "value2" } ) %> 

을 다음과 같은 HTML을 방출 할 수 동시에 dev.blah.com과 staging.blah.com의 조합 ?? 또한 html에 대해 조금 더 설명 할 수 있습니까?액션은 그 URL로는 불가능합니다. (내 자신의 이익을 위해서 :) –

+0

그들은 항상 dev/staging/www입니다. 결코 혼합물이 아니며 페이지 전체에 걸쳐 링크의 위치가 주어지기 때문에 많은 html.actions가 필요합니다. html 액션은 실제로 별도의 요청이기 때문에 효율적이지 않습니다. –

답변

2

(5) 경로를 가져 와서 내부적으로 appsetting을 읽고 연결하는 htmlhelper를 만듭니다.

나는 이걸 가지고 갈 것이다. 혹시에 대한 링크를 가리키는하지 않는 즉, '항상'상대 링크입니다 -

<a href="http://dev.blah.com/foo/bar.php?param1=value1&param2=value2">link text</a> 
0

과거에 수행 한 작업은 내 마스터 페이지에서 viewdata/viewbag를 사용하고 내베이스 컨트롤러에 해당 값을 채 웁니다. 기본 컨트롤러는 다른 클래스를 호출하여 web.config에서 값을 읽는 작업을 수행합니다.

이렇게하면보기가 매우 깨끗합니다 (예 : appsettings를 읽을 코드가 포함되지 않음). 마스터를 사용하는 모든 뷰와 일치하는 기본 뷰 모델을 만들 필요가 없습니다.

이 접근법은 viewdata/viewbag를 사용하는 단점이 있지만 제 경우에는 괜찮 았고 구현하기가 매우 쉽다고 결정했습니다.

관련 문제