2012-10-31 20 views
7

Próbuję utworzyć niestandardowego pomocnika html, który pobierze tekst z pliku XML i wyrenderuje go w widoku. XML jest zorganizowany w hierarchii, gdzie górne węzły reprezentują nazwy kontrolerów, podążając za nazwami akcji, a następnie pojedynczymi kluczami.ASP.NET MVC - Pobierz bieżący kontroler i nazwę akcji w pomocniku

cel jest do osiągnięcia składni takich jak:

@Html.Show("Title") 

Gdzie pomocnik będzie wnioskować nazwy kontrolera i nazwy akcji z widoku gdzie została wywołana.

Czy istnieje sposób na uzyskanie tych informacji w metodzie rozszerzenia html helper?

Odpowiedz

8

Możesz pobrać kontroler prądu i działanie od htmlHelper.ViewContext.RouteData. Użyj metodę rozszerzenia poniżej, aby pobrać odpowiednią wartość z xml:

//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); 
} 
8

Oto Nazwa Działanie:

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

jeszcze prostsze:

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

i

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

daje ty kontroler i akcja na ja, odpowiednio.

Powiązane problemy