2009-05-28 12 views
16

में यूआरएल को हल करता है मैं jQuery.load ('/ business/Tags') के माध्यम से कुछ सामग्री लोड कर रहा हूं, जो मेरे स्थानीय वेबसर्वर का उपयोग करते समय अच्छी तरह से काम करता है। लेकिन आईआईएस का उपयोग करते समय यह सही ढंग से हल नहीं होता है। मैंने ResolveUrl जैसे इस बारे में कुछ अलग-अलग तरीकों को देखा है। अपने जावास्क्रिप्ट में यूआरएल को हल करने का सबसे अच्छा तरीका क्या है?एएसपी.नेट एमवीसी जावास्क्रिप्ट

उत्तर

18

मैं अपनी जावास्क्रिप्ट के साथ इस सटीक समस्या में भाग गया। चूंकि मेरी जावास्क्रिप्ट एक अलग फ़ाइल में भी थी जो मेरे मास्टर पेज में शामिल थी, मैं अपने मामले में ResolveUrl का उपयोग नहीं कर सका।

यहां बताया गया है कि मैंने इसे अपने मामले में कैसे हल किया।

<script type="text/javascript"> 
    var baseUrl = "<%= Request.Url.GetLeftPart(UriPartial.Authority) %>"; 
</script> 

मैं एक वैश्विक चर है कि मेरे सभी जावास्क्रिप्ट baseurl बुलाया फ़ाइलों के लिए सुलभ है सेट कर रहा हूं: मैं निम्नलिखित शीर्ष पर मेरे गुरु पृष्ठ में मेरे सिर टैग में JavaScript शामिल थे।

आपका कोड तो बन गयी:

jQuery.load(baseUrl + '/Business/Tags'); 
+0

मैंने इस विधि की कोशिश की लेकिन मुझे काफी कुछ नहीं मिल रहा है, लेकिन मुझे लगता है कि मैं इसके साथ काम कर सकता हूं।मुझे इस तरह की स्ट्रिंग मिल रही है जैसे "http: // mtsengv003 /" लेकिन मुझे इस तरह की एक "http: // mtsengv003/MVC /" धन्यवाद –

+5

मुझे लगता है कि इसका उपयोग करना बेहतर है: var baseUrl = "<% = अनुरोध .Url.GetLeftPart (UriPartial.Authority) + Request.ApplicationPath.TrimEnd ('/')%> "; –

+0

@ eu-ge-ne: इसे इंगित करने के लिए धन्यवाद। मेरी याददाश्त वह नहीं थी जो इसका इस्तेमाल करती थी। आपका कोड सही है। –

5

मेरे लिए जैसा कि मैंने Url.Action/Url.RouteUrl सहायकों उपयोग कर रहा हूँ जावास्क्रिप्ट/jQuery के साथ जहां यह संभव है:

$.load('<%= Url.Action("Tags", "Business") %>') 

या

$.load('<%= Url.RouteUrl("BusinessTagsRoute") %>') 

अन्य मामलों में मैं ResolveUrl सहायक का उपयोग कर रहा हूं (MVCContrib से या आप अपना खुद का लिख ​​सकते हैं):

$.load('<%= Url.ResolveUrl("~/Business/Tags") %>') 

UPDATED:

यह भी कार्यों के साथ आपकी जावास्क्रिप्ट/jQuery के लिए विशेष नियंत्रक बनाने के लिए, जावास्क्रिप्ट के साथ PartialViews लौटने संभव है:

public ActionResult YourJavaScript() 
{ 
    Response.ContentType = "application/x-javascript"; 
    return PartialView("YourJavaScript"); 
} 
में अपने YourJavaScript.ascx आप

फिर WebForms सर्वर टैग के साथ जावास्क्रिप्ट/jQuery कोड का उपयोग कर सकते हैं। मैं अभी भी jQuery/AJAX

+1

यदि आप अपनी सभी जावास्क्रिप्ट को एक अलग फ़ाइल में रखते हैं और फिर अपने मास्टर पेज में Url.Content का उपयोग करके इस फ़ाइल का संदर्भ देते हैं, तो Url.ResolveUrl आपकी जावास्क्रिप्ट के भीतर काम नहीं करेगा। अगर कोई इस बारे में गलत है तो कृपया मुझे सही करें। –

1

में शायद ही कभी कोडित यूआरएल का उपयोग न करने की अनुशंसा करता हूं, फिर भी मैं आपके मास्टर पेज में बेस href टैग का उपयोग करने की सलाह देता हूं। इसलिए किसी भी छवियों या जावास्क्रिप्ट कॉल इस यूआरएल से हल हो जाएंगे। यह आपको बाहरी जावा फ़ाइल में अपने जावास्क्रिप्ट फ़ंक्शंस/कॉल डालने की अनुमति देगा।

 
<html> 
    <head> 
     <base href="http://www.mysite.com/virtual_dir1/"> 
     <script src="location_of_js_file"> 

बेस href में अंतिम '/' याद रखें।

इसके अलावा, अग्रणी '/' को हटाएं और जब भी आप jQuery.load ('व्यवसाय/टैग') करते हैं, तो यह वास्तव में http://www.mysite.com/virtual_dir1/Business/Tags से आ जाएगा।

+0

मुझे वास्तव में वास्तव में यह दृष्टिकोण पसंद है। इतना साफ है और बहुत कम प्रयास की आवश्यकता है। धन्यवाद – lomaxx

+0

यह निश्चित रूप से समस्या का व्यावहारिक दृष्टिकोण है, लेकिन इस तरह से ['आधार'] (http://www.w3.org/TR/REC-html40/struct/links.html#h-12.4) का उपयोग करना है गलत। बेस एचआरईएफ का उपयोग केवल संबंधित यूआरआई को आपके वर्तमान पृष्ठ पर हल करने के लिए किया जाना चाहिए। इस आधार पर 'आधार 'सेट करके ** इस पृष्ठ पर सभी ** सापेक्ष यूआरआई' http: // www.mysite.com/virtual_dir1 /' को इंगित करेंगे। – ahsteele

2

तरीके हम अपने ऐप्लिकेशन में ऐसा करने की एक जोड़े:

var applicationPath = '<%= Url.Content("~/") %>'; 

या

var applicationPath = '<%= Request.Url.Scheme %>://<%= Request.Url.Host %><%= Request.ApplicationPath %>/'; 

हम तो हमारे सभी ajax कॉल के लिए आधार के रूप में यूआरएल applicationPath का उपयोग करें।

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