2012-10-31 21 views
7

XML dosyasından bazı metinleri alıp görünümde oluşturacak şekilde özel bir html yardımcı oluşturmaya çalışıyorum. XML, üst düğümlerin eylem adlarını ve ardından bağımsız anahtarları izleyerek denetleyici adlarını temsil ettiği hiyerarşide düzenlenir.ASP.NET MVC - Geçerli denetleyiciyi ve eylem adını yardımda bulun

Hedef sözdizimi gerçekleştirmek için örneğin, yardımcı denilen bu görünümden denetleyicisi ve işlem adı sonucuna olur

@Html.Show("Title") 

.

Bu bilgiyi html yardımcı uzantı yönteminde almanın bir yolu var mı?

cevap

8

Geçerli denetleyiciyi ve eylemi htmlHelper.ViewContext.RouteData'dan alabilirsiniz. xml karşılık gelen değerini almak için aşağıdaki uzatma yöntemi kullanın:

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

Eylem adıdır sen kontrolör ve eylem sırasıyla,

12

Hatta daha basit:

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

ve

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

verir Burada

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