2011-05-09 6 views
5

में किसी वर्ग से Control.GetRouteUrl का उपयोग कैसे करें मैं कुछ सफलता के साथ एएसपीनेट वेब फॉर्म 4.0 में रूटिंग का उपयोग कर रहा हूं। मेरे पृष्ठों में मैं इस तरह के मार्ग उत्पन्न करने के लिए Page.GetRouteURL का उपयोग कर रहा हूं।App_Code

<a href = '<%=GetRouteUrl("MyRoute", new {MyFirstRouteValue = "ABC", MySecondRouteValue=123}) #>' >Link Text</a> 

यह पूरी तरह से अच्छा काम करता है, लेकिन मुझे पता चला है कि ऐसे समय होते हैं जब मुझे app_code में कक्षा में यह कार्यक्षमता रखने की आवश्यकता होती है। मैं मैन्युअल रूप से स्ट्रिंग.फॉर्मैट के साथ मार्ग का निर्माण कर सकता हूं, लेकिन यह एक प्रकार का मैला है क्योंकि यह ग्लोबल.एक्सएक्स में कोड को डुप्लिकेट करेगा जो मार्गों को परिभाषित करता है।

बेशक, App_Code में किसी वर्ग में कोई पृष्ठ ऑब्जेक्ट नहीं है, इसलिए मैं केवल GetRouteUrl को कॉल नहीं कर सकता। docs on msdn में देखकर मुझे कुछ दिखने में मदद मिलती है।

यह विधि सुविधा कोडिंग के लिए प्रदान की जाती है। यह रूट कोलेक्शन.गेटवर्टुअलपैथ (RequestContext, स्ट्रिंग, रूटवेल्यू डिक्शनरी) विधि को कॉल करने के बराबर है।

तो मैं this page को डॉक्स जिसमें कहा गया है कि System.Web.Routing.GetVirtualPath() एक System.Web.Routing.RequestContext वस्तु की आवश्यकता का पालन किया। मुझे HttpContext ऑब्जेक्ट के बारे में पता है, लेकिन मैं यह नहीं समझ सकता कि RequestContext क्या है। किसी के साथ इस पर कोई भाग्य था?

उत्तर

9

RequestContexta property के रूप में HttpRequest ऑब्जेक्ट के रूप में उपलब्ध है, तो आप इसे HttpContext.Current.Request.RequestContext के रूप में संदर्भित कर सकते हैं। उदाहरण के लिए,

public string GetRouteUrl(string routeName, object routeParameters) 
{ 
    var dict = new RouteValueDictionary(routeParameters); 
    var data = RouteTable.Routes.GetVirtualPath(HttpContext.Current.Request.RequestContext, routeName, dict); 
    if (data != null) 
    { 
     return data.VirtualPath; 
    } 
    return null; 
} 
+1

धन्यवाद विनय! इसने मुझे गुगल समय के घंटे बचाया! –

संबंधित मुद्दे