2012-10-31 3 views
7

XML 파일에서 일부 텍스트를 가져 와서 뷰에 렌더링하는 사용자 정의 HTML 도우미를 만들려고합니다. XML은 최상위 노드가 작업 이름 다음에 개별 키 다음에 컨트롤러 이름을 나타내는 계층 구조로 구성됩니다.ASP.NET MVC - 도우미에서 현재 컨트롤러 및 액션 이름 얻기

목표 구문을 수행하는 등 : 헬퍼가 호출 된 뷰에서 컨트롤러 이름과 작업 이름을 유추 할

@Html.Show("Title") 

.

html 도우미 확장 메서드에서 해당 정보를 얻을 수있는 방법이 있습니까?

답변

8

htmlHelper.ViewContext.RouteData에서 현재 컨트롤러 및 동작을 검색 할 수 있습니다. XML에서 해당 값을 검색하기 위해 아래의 확장 방법을 사용

ViewContext.Controller.ValueProvider.GetValue("action").RawValue.ToString() 
8

하는 작업 이름입니다 당신은 컨트롤러와 액션 NA 나, 각각.

12

더 간단 :

htmlHelper.ViewContext.RouteData.Values["controller"] 

htmlHelper.ViewContext.RouteData.Values["action"] 

주는 여기

//make sure you include System.Xml.XPath, otherwise extension methods for XPath 
//won't be available 
using System.Xml.XPath; 

public static MvcHtmlString Show(this HtmlHelper htmlHelper, 
               string key) 
{ 
    XElement element = XElement.Load("path/to/yourXmlfile.xml"); 
    RouteData routeData = htmlHelper.ViewContext.RouteData; 
    var keyElement = element.XPathSelectElements(string.format("//{0}/{1}/{2}", 
                routeData.GetRequiredString("controller"), 
                routeData.GetRequiredString("action"), 
                key) 
               ).FirstOrDefault(); 

    if (keyElement == null) 
     throw new ApplicationException(
      string.format("key: {0} is not defined in xml file", key)); 

    return new MvcHtmlString(keyElement.Value); 
} 
관련 문제