2011-10-10 17 views
7

मेरे पास http://localhost/myappname से चल रहा एक एएसपी.नेट एमवीसी वेब एप्लिकेशन है। JQuery से, मैं कुछ उपयोगकर्ता कार्रवाई के आधार पर आंशिक दृश्य वापस करने के लिए jQuery $ .ajax() कॉल करता हूं। मैं आमतौर पर इसे उसी नियंत्रक में एक दृश्य से कॉल करता हूं जिसमें फ़ंक्शन शामिल है जिसे मैं अजाक्स के माध्यम से कॉल कर रहा हूं।jQuery अजाक्स: ऐप रूट से संदर्भ एमवीसी नियंत्रक यूआरएल

function loadMyPartialView() { 
    $.ajax({ 
     type: 'GET', 
     url: 'Home/GetNavigationTreePV/', 
     success: function (data) { onSuccess(data); }, 
     error: function (errorData) { onError(errorData); } 
    }); 
    return true; 
} 

यह ऊपर यूआरएल http://localhost/myappname/Home/GetNavigationTreePV का संकल्प लिया जाता है और आंशिक दृश्य सही ढंग से दिया जाता है: उदाहरण के लिए, मेरे घर नियंत्रक के उस दृश्य पर निम्नलिखित समारोह (जो अच्छी तरह से काम करता है) है।

अब, मैं अपने कार्यों का परीक्षण करने के लिए qUint का उपयोग करने की कोशिश कर रहा हूं। इस टेस्ट केस में, मैं सिर्फ यह सत्यापित करना चाहता हूं कि मैं फ़ंक्शन के अंत तक पहुंच जाता हूं और सत्य लौटाता हूं। मैंने QUNIT नियंत्रक और संबंधित दृश्य बनाया है (जो मेरी यूनिट परीक्षण जावास्क्रिप्ट फ़ाइल लोड करता है)। Test.js फ़ाइल से जिसमें मेरे यूनिट परीक्षण शामिल हैं, मैं उन कार्यों को कॉल करने का प्रयास करता हूं जो मेरे घर के दृश्यों में हैं, जैसे उपर्युक्त। लेकिन, चूंकि अब मैं QUNIT नियंत्रक से बाहर चला रहा हूं, यूआरएल http://localhost/myappname/qunit/Home/GetNavigationTreePV पर हल हो गया है।

मैंने अपने AJAX अनुरोध के यूआरएल को /Home/GetNavigationTreePV/ (पिछले आगे स्लैश के साथ) बदलने का प्रयास किया है, लेकिन जब मैं ऐसा करता हूं तो मुझे निम्नलिखित यूआरएल http://localhost/myappname/Home/GetNavigationTreePV मिलता है।

तो, स्पष्ट होने के लिए, मैं अपने AJAX अनुरोध को इस तरह से लिखने की कोशिश कर रहा हूं जो हमेशा मेरे एमवीसी अनुप्रयोग की जड़ से शुरू होगा, और फिर मेरे $ .ajax() फ़ंक्शन में दिए गए यूआरएल पैरामीटर को जोड़ देगा।

क्या ऐसा करने का कोई आसान तरीका है? क्या मैं इस बारे में अजीब तरीके से जा रहा हूं?

उत्तर

10

मैं सीधे जावास्क्रिप्ट window.location.pathname उपयोग करने के साथ यह पूरा करने में सक्षम था। निम्नलिखित उदाहरण देखें:

function loadMyPartialView() { 
    $.ajax({ 
     type: 'GET', 
     url: window.location.pathname + 'Home/GetNavigationTreePV/', 
     success: function (data) { onSuccess(data); }, 
     error: function (errorData) { onError(errorData); } 
    }); 
    return true; 
} 
+0

यह वही है जो मैं भी ढूंढ रहा था। आईआईएस पर अपने ऐप को तैनात करते समय मुझे समस्या का सामना करना पड़ रहा था, उस स्थिति में जेएस फाइल में उल्लिखित यूआरएल सही ढंग से हल नहीं हो रहा था। – binu

10

मैं अपने MVC देखें पेज में लगता है कि आप की जरूरत है @ Url.Action

function loadMyPartialView() { 
     $.ajax({ 
      type: 'GET', 
      url: '@Url.Action("GetNavigationTreePV", "Home")', 
      success: function (data) { onSuccess(data); }, 
      error: function (errorData) { onError(errorData); } 
     }); 
     return true; 
    } 

वैकल्पिक रूप से आप @ Url.Content

function loadMyPartialView() { 
     $.ajax({ 
      type: 'GET', 
      url: '@Url.Content("~/home/GetNavigationTreePV")', 
      success: function (data) { onSuccess(data); }, 
      error: function (errorData) { onError(errorData); } 
     }); 
     return true; 
    } 

उपयोग कर सकते हैं यह एक .js में है, तो फ़ाइल, आप यूआरएल में

loadMyPartialV iew ('@ Url.Action ("GetNavigationTreePV", "घर")')

+0

कोई भाग्य नहीं। उस स्थिति में, यूआरएल को हल किया गया था: https: //localhost/ctsw/qunit/@Url.Action .... – MattW

+0

आपको इसे एमवीसी व्यू पेज में होना चाहिए .js फ़ाइल नहीं .. – Steve

+0

आह ठीक है। .. इस मामले में, मुझे लगता है कि qUnit परीक्षण ढांचे का उपयोग करने के लिए मुझे इसे .js फ़ाइल से करने की आवश्यकता हो सकती है। मुझे देखने दो कि मैं दृश्य में यूनिट परीक्षण लिख सकता हूं। – MattW

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