2009-05-07 5 views
2

ASP.NET MVC site.master에 전역 메뉴를 구축하려고하는데 site.master에서 Application Settings 속성에 액세스하는 방법에 대해 궁금합니다. 마크 업? 이전에는 아마도 site.master의 코드 숨김에서 config 객체를 인스턴스화 한 다음 공용 속성을 설정했을 것입니다. 하지만 지금은 내 머리를 긁적이고 ... 커피가 더 필요합니다. ASP.NET MVC보기에서 응용 프로그램 설정 액세스

는 응답 코드

추가 base을 호출 한 어플리케이션의 propererties 설정을 문자열로 업데이트 "http://mysite.com는"

public class GlobalMenu 
{ 
    private string _baseurl; 
    public string baseurl 
    { 
     get { return _baseurl; } 
     set 
     { 
      _baseurl = value; 
     } 
    } 

} 
GlobalMenu.cs

의 모델 클래스를 만들어 그것의 값을 준

BaseController라는 이름의 기본 컨트롤러 클래스를 만들고 Controller에서 상속했으며 Overroad OnActionExecutedly :

 protected override void OnActionExecuted(ActionExecutedContext filterContext) 
    { 
     string baseurl = Properties.Settings.Default.baseurl; 

     GlobalMenu menumodel = new GlobalMenu(); 
     menumodel.baseurl = baseurl; 
     ViewData["menudata"] = menumodel; 
     base.OnActionExecuted(filterContext); 
    } 

은 다음과 같습니다 강하게 GlobalMenu에 입력 된 공유 폴더에 ViewGlobalMenu라는 부분 뷰를 만든 ...하지만 분명히 더 많은 물건과 마지막으로

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyApp.Web.Models.GlobalMenu>" %> 

Site.Master I에서 메뉴에 표시 할 위치를이 위치에 추가했습니다.

<%Html.RenderPartial("ViewGlobalMenu", (MyApp.Web.Models.GlobalMenu)ViewData["menudata"]); %> 

답변

1

다음은 내가 사용하는 전략입니다. 다른 컨트롤러가 컨트롤러에서 파생되는 기본 컨트롤러를 만듭니다. 기본 컨트롤러에서 ActionExecuted 메서드를 재정의하고 응용 프로그램 설정에 액세스하도록 설정합니다 (캐시 할 수도 있음). ViewData의 특정 키에 할당 된 강력한 형식의 메뉴 모델 클래스로 메뉴에 대한 ViewData를 생성합니다. ViewResult (및 아마도 PartialViewResults)를 반환하는 작업에만 모델을 제공하면됩니다.

메뉴 모델 클래스를 사용하여 전역 메뉴 마크 업을 구현하는 강력한 형식의 부분보기를 만듭니다. 이것을 RenderPartial을 통해 MasterPage 정의에 포함 시키십시오. 해당 키에 해당하는 ViewData 항목을 모델로 전달하여 메뉴에서 모델의 속성을 사용할 수 있도록합니다.

+0

스냅처럼 작동 ... 감사합니다! 위의 샘플 코드 추가. – Webjedi

+0

기본 컨트롤러에서 모든 컨트롤러를 파생해야한다는 것을 잊지 않는 한. 현재 HttpModule 또는 HttpHandler 내에서 Properties 개체를 읽는 솔루션을 찾고 있습니다. – belugabob

+0

@belugabob - 우리가 테스트하는 이유입니다. – tvanfosson