2012-10-31 19 views
7

मैं कस्टम एचटीएमएल सहायक बनाने की कोशिश कर रहा हूं जो एक्सएमएल फ़ाइल से कुछ पाठ पुनर्प्राप्त करेगा और इसे दृश्य में प्रस्तुत करेगा। एक्सएमएल पदानुक्रम में व्यवस्थित होता है जहां शीर्ष नोड्स नियंत्रक नामों का प्रतिनिधित्व करते हैं, क्रिया नामों और फिर व्यक्तिगत कुंजी के बाद।एएसपी.नेट एमवीसी - सहायक नियंत्रक और एक्शन नाम सहायक में

लक्ष्य वाक्य रचना को पूरा करने के लिए है जैसे:

@Html.Show("Title") 

कहाँ सहायक दृश्य जहां यह कहा जाता था से नियंत्रक का नाम और कार्य नाम का अनुमान लगा होगा।

क्या एचटीएमएल सहायक विस्तार विधि में यह जानकारी प्राप्त करने का कोई तरीका है?

उत्तर

8

आप वर्तमान नियंत्रक और htmlHelper.ViewContext.RouteData से कार्रवाई पुनर्प्राप्त कर सकते हैं। एक्सएमएल से संबंधित मान पुनः प्राप्त करने के लिए नीचे दिए गए विस्तार विधि का उपयोग करें:

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

यहाँ कार्रवाई का नाम है आप नियंत्रक और कार्रवाई ना मैं, क्रमशः।

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); 
} 
संबंधित मुद्दे