2008-08-25 14 views
32

सबसे अच्छा तरीका है Asp.Net में एक साझा/स्थिर समारोह में ResolveUrl() का उपयोग करने के क्या है में System.Web.UI.Control.ResolveUrl() का उपयोग करना? VB.Net के लिए मेरे वर्तमान समाधान है:ASP.Net: एक साझा/स्थिर समारोह

Dim x As New System.Web.UI.Control 
x.ResolveUrl("~/someUrl") 

या सी #:

System.Web.UI.Control x = new System.Web.UI.Control(); 
x.ResolveUrl("~/someUrl"); 

लेकिन मुझे लगता है कि यह फोन करने का सबसे अच्छा तरीका नहीं है।

उत्तर

3

मैं, HttpContext.Current का उपयोग पेज को पाने के लिए तो यह है कि किसी भी पेज/वेब नियंत्रण विधियों को चलाने के लिए करते हैं।

21

यह ध्यान देने योग्य है कि यद्यपि System.Web.VirtualPathUtility.ToAbsolute यहां बहुत उपयोगी है, यह नियंत्रण के लिए एक आदर्श प्रतिस्थापन नहीं है। ResolveUrl।

कम से कम एक महत्वपूर्ण अंतर है: Control.ResolveUrl क्वेरी स्ट्रिंग्स को बहुत अच्छी तरह से संभालता है, लेकिन वे वर्चुअलपाथ उपयोगिता को एचटीपीएक्सप्शन फेंकने का कारण बनते हैं। यह पहली बार होने पर पूरी तरह से रहस्यमय हो सकता है, खासकर अगर आप उस तरीके से उपयोग कर रहे हैं जो Control.ResolveUrl काम करता है।

आप क्वेरी स्ट्रिंग का उपयोग करना चाहते की सटीक संरचना पता है, यह बहुत आसान के आसपास काम करने के लिए अर्थात् है,:

public static string GetUrl(int id) 
{ 
    string path = VirtualPathUtility.ToAbsolute("~/SomePage.aspx"); 
    return string.Format("{0}?id={1}", path, id); 
} 

... लेकिन अगर क्वेरी स्ट्रिंग एक से में पारित कर दिया हो रही है अज्ञात स्रोत तो आपको इसे किसी भी तरह से पार्स करने की आवश्यकता होगी। (इससे पहले कि आप उसमें बहुत गहरा हो जाएं, ध्यान दें कि सिस्टम.यूरी आपके लिए ऐसा करने में सक्षम हो सकता है)।

+0

यह किसी भी अधिक सच नहीं हो सकता। .NET 4 में जब मैं 'VirtualPathUtility.ToAbsolute ("~/bar/baz? Qux = 123 और quux = 456", "/ foo") का मूल्यांकन करता हूं,' मुझे '/ foo/bar/baz? Qux = 123 और quux = 456' मिलता है –

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