2010-01-22 14 views
17

मैं इस साइट http://localhost/virtual जहां आभासी वर्चुअल निर्देशिकाजावास्क्रिप्ट वर्चुअल निर्देशिका से अनजान

मैं एक Ajax अनुरोध है कि JQuery

$.getJSON("/Controller/Action") 

का उपयोग कर एक जावास्क्रिप्ट फ़ाइल में परिभाषित किया गया है है है है कहो जब इसे कहा जाता है, तो ग्राहक रूट स्तर पर यूआरएल खोजने की कोशिश करता है यानी http://localhost/Controller/Action

यदि मैं tilde (~) प्रतीक जोड़ता हूं में, यह http://localhost/virtual/~/Controller/Action

में बदल जाता है यह (अगर यह मैं चाहता था करने के लिए था) http://localhost/virtual/Controller/Action

को इसे ठीक करने पर कोई भी विचार को हल करना चाहिए?

+0

ऐसा कोई प्रतीत नहीं होता है, इसलिए मैंने केवल एक सापेक्ष पथ डाला है उदा। ../Controller/Action – Dann

+0

यदि आप हमें अपेक्षित आउटपुट बताते हैं तो यह मदद करता है। आप केवल हमें दो आउटपुट बता रहे हैं जिन्हें आप नहीं चाहते हैं। तुम क्या चाहते हो? – slebetman

+0

मैं इसे http: // localhost/वर्चुअल/कंट्रोलर/एक्शन – Dann

उत्तर

22

अकु के संकेत ऊपर सही दिखते थे लेकिन यह मेरे लिए काम नहीं करना चाहता था। अंत में मैं पता लगा इस

<script type="text/javascript"> 
    var config = { 
     contextPath: '<%= @Url.Content("~") %>' 
    }; 
</script> 

की तरह उपयोग करने के लिए और फिर मेरी जावास्क्रिप्ट में मैं इस

config.contextPath + 'myAppPath "की तरह उपयोग।

तो कोई वर्चुअल निर्देशिका इस के मामले में "/" + "myAppPath" के लिए और एक वर्चुअल निर्देशिका इस करने के लिए "/ VirtualPath /" + "myAppPath"

और इस अंत में मेरे लिए काम किया निराकरण के मामले में हल करता है।

+0

मेरे लिए खूबसूरती से काम करता है! और सरल :) –

2

शायद, $.getJSON("Controller/Action") करेगा?

+0

नहीं के रूप में आउटपुट करना चाहता हूं, नहीं, यह सिर्फ पथ में जोड़ता है। यह जेएस फ़ाइल रूट में था अगर यह काम कर सकता है। – Dann

2

आपके एप्लिकेशन रूट पथ के लिए टिल्डे शॉर्टकट एएसपी.नेट की एक विशेष विशेषता है, जो स्वयं यूआरएल का हिस्सा नहीं है। नतीजतन जावास्क्रिप्ट से टिल्ड के साथ एक यूआरएल का उपयोग करने की कोशिश करने से साइट रूट को हल नहीं किया जाएगा, यह आपको केवल एक शाब्दिक ~ देगा जैसा आप देख सकते हैं।

आपको जावास्क्रिप्ट के लिए एप्लिकेशन रूट पथ का मान पास करना होगा ताकि यह यूआरएल स्वयं ही बना सके। मुझे लगता है कि ASP.NET से परिचित नहीं हूँ, लेकिन मैं आप की तरह कुछ कर सकते हैं विश्वास करते हैं:

<script type="text/javscript"> 
    var approot= <%= JavaScriptSerializer.Serialize(Request.ApplicationPath) %>; 
    ... $.getJSON(approot+'/Controller/Action') ...; 
</script> 

यह करने के लिए यदि आप जानते हैं वहाँ approot के लिए पृष्ठ पर एक लिंक भी है href पढ़ने के लिए होगा एक आसान तरीका उस लिंक की: जे एस फ़ाइल के लिए

var approot= $('#homepagelink').attr('href'); 
0

सापेक्ष पथ एकमात्र समाधान मैंने पाया $ .getJSON ("था ../ नियंत्रक/कार्रवाई ")

14

मैं अपने masterpage में इस समाधान को सफलतापूर्वक

प्लेस निम्नलिखित तत्व इस्तेमाल किया

<%= Html.Hidden("HiddenCurrentUrl", Url.Action("Dummy"))%> 

आपका मुख्य जावास्क्रिप्ट फ़ाइल

var baseUrl = ""; 

सेट में एक वैश्विक चर घोषित करें जब आपका जावास्क्रिप्ट लोड हो जाता है तो "HiddenCurrentUrl" के मान पर baseUrl

baseUrl = $("#HiddenCurrentUrl").val(); 
baseUrl = baseUrl.substring(0, baseUrl.indexOf("Dummy")); 

उपयोग baseurl

$.getJSON(baseUrl + "Action") 

संपादित बेहतर समाधान

अपने नियंत्रक

ViewBag.BaseUrl = Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath + "/"; 

आपके मास्टर पृष्ठ में

<script type="text/javascript"> 
    var YourNameSpace = YourNameSpace || {}; 
    YourNameSpace.config = { 
     baseUrl: "@ViewBag.BaseUrl" 
    } 
</script> 

$.getJSON(YourNameSpace.config.baseUrl + "Action") 
+0

मैं इसे उत्तर के रूप में चिह्नित कर रहा हूं क्योंकि यह फंकी है, और मुझे jQuery और एमवीसी के फंकी मिश्रण पसंद हैं। यद्यपि मैं Url.Action का उपयोग करने के लिए कुछ diff का उपयोग कर सकता हूं क्योंकि सबस्ट्रिंग चीज इतनी साफ नहीं है – Dann

+0

बढ़िया है कि आपको यह सहायक लगता है! मैं Url.Action समाधान से संतुष्ट नहीं हूं इसलिए कृपया मुझे बताएं कि आप इसे कैसे हल करते हैं। मुझे यूआरएल सामान से नफरत है। देव/परीक्षण/प्रोड वातावरण के बीच हमेशा समस्याएं। – Andreas

+0

मैंने भी मतदान किया। यह फंकी है, लेकिन मैं अभी एक और अधिक सुरुचिपूर्ण समाधान के बारे में सोचने में असमर्थ हूं और यह काम करता है ... चालाक। –

4

एक और तरीका है एक आधार यूआरएल

<script type="text/javascript"> 
    window.g_baseUrl = '@Url.Content("~")'; 
</script> 

उदाहरण के लिए है पाने के लिए, आप SomeName वर्चुअल निर्देशिका तो window.g_baseUrl चर इच्छा से अपने अनुप्रयोग चलाने यदि आपके baseurl का प्रयोग करें /कुछ नाम/

के बराबर होना इस विधि का लाभ है अन्य नियंत्रकों जैसे

$.getJSON(window.g_baseUrl + "AnotherController/Action") 
0

मैं जानता हूँ कि इस सवाल का बहुत पुराना है, लेकिन मैं हाल ही में इस मुद्दे के साथ संघर्ष कर रहा था और

url:'<%=VirtualPathUtility.ToAbsolute("~/Include/cntrols/Data.aspx") %>', 

का उपयोग कर यह मेरा ajax कॉल में अच्छा काम करता है इसे हल करने में सक्षम था ...

0

यह भी है इस सवाल का जवाब देने में देर हो चुकी है।लेकिन किसी के लिए उपयोगी हो सकता है क्योंकि मुझे एक ही समस्या थी। उपरोक्त उत्तरों में उल्लिखित सभी चरणों को करने के बजाय, बेहतर तरीका

Url.Action('action','controller') का उपयोग करना बेहतर तरीका है।

यह यूआरएल /VIRDIR/controller/action उत्पन्न करेगा यदि यह वर्चुअल निर्देशिका से चल रहा है या अन्य मामलों में /controller/action उत्पन्न करता है।

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