2011-03-09 8 views
10

पर तैनात करते समय काम नहीं कर रहा है इसलिए मुझे यह एमवीसी 3 एप्लिकेशन मिला है जिसमें एक ड्रॉपडाउन है जिसका उपयोग मैं jquery के माध्यम से div को पॉप्युलेट करने के लिए करता हूं। यह स्थानीय रूप से ठीक काम करता है लेकिन जब मैं इसे सर्वर पर तैनात करता हूं तो यह गलत तरीके से पुनर्निर्देशित होता है। यहां मेरी jquery है:एमवीसी 3 के लिए jquery पोस्ट का उपयोग

$("#ddlCategoryMain").change(function() { 
    $.post("/Home/Category/", { mileID: $(this).val() }, function (data) { 
     refreshDiv($("div#main"), data); 
    }); 
}); 

function refreshDiv(select, data) { 
    select.html(""); 
    select.append(data); 
} 

स्थानीय रूप से यह ठीक काम करता है। लेकिन जब मेरे सर्वर पर तैनात किया गया तो http://myserver/mywebsite/Home/Category

के बजाय http://myserver/Home/Category की तलाश में प्रतीत होता है, मैं jquery फ़ंक्शन में/होम/श्रेणी से पहले अपने एप्लिकेशन का नाम जोड़कर इसे ठीक कर सकता हूं, लेकिन यह सही नहीं लगता ...

मैंने/home से पहले ../, ~/.. ../../ जोड़ने की भी कोशिश की लेकिन इससे कोई फर्क नहीं पड़ता।

इस मामूली समस्या के लिए कोई समाधान? धन्यवाद!

उत्तर

13

विकल्प 1

मानते हुए अपने jQuery विधि अपने दृश्य में आपके द्वारा निर्दिष्ट कार्य का नाम और नियंत्रक नाम का उपयोग करके उपयोग कर सकते हैं Url.Action()

एक कार्रवाई विधि करने के लिए एक पूरी तरह से योग्य URL जेनरेट ।

$("#ddlCategoryMain").change(function() { 
    $.post('<%=Url.Action("Category", "Home")%>', { mileID: $(this).val() }, function (data) { 
     refreshDiv($("#main"), data); 
    }); 
}); 

या यह करता है, तो आप एक बाहरी js में उस्तरा

$("#ddlCategoryMain").change(function() { 
    $.post('@Url.Action("Category", "Home")', { mileID: $(this).val() }, function (data) { 
     refreshDiv($("#main"), data); 
    }); 
}); 

विकल्प 2

विधि है प्रयोग कर रहे हैं फ़ाइल है कि आप अपने ध्यान में रखते हुए एक वैश्विक चर घोषित कर सकता है।

var myUrl = '@Url.Action("Category", "Home")'; 

और फिर अपने $.post

$("#ddlCategoryMain").change(function() { 
    $.post(myUrl , { mileID: $(this).val() }, function (data) { 
     refreshDiv($("#main"), data); 
    }); 
}); 
+0

धन्यवाद! आपका पहला विकल्प ऐसा कुछ है जिसे मैं देख रहा था लेकिन किसी भी तरह से गलत काम करना चाहिए क्योंकि यह काम नहीं कर रहा था। यह अब करता है! – LanFeusT

+0

क्या किसी को पता है कि यह URL.action() के बिना क्यों काम नहीं कर रहा है? – mzonerz

0

नहीं एक सीधा जवाब में है, लेकिन यह कैसे मैं अपने Zend MVC साइट पर यह करते हैं, जब मैं अपने jQuery जोड़ने है - मैं आधार के रूप में एक वर सेट यूआरएल - फिर AJAX कॉल में, पथ के सामने var रखें।

तो मेरे लिए मुझे क्या करना होगा:

$this->jQuery()->addOnLoad('var baseURL = "'.$this->baseUrl('').'";'); 

तो मैं इस्तेमाल कर सकते हैं;

$.post(baseURL+"/Home/Category/"...... 
2

हम एक ही मुद्दा सामना कर रहे थे जब हम सर्वर पर कोड तैनात, स्थानीय स्तर पर यह वास्तव में ठीक काम किया तो यह हमें बहुत मदद की।

हम रेजर का उपयोग कर रहे हैं और है कि हम क्या कर रहे थे है:

$.post("/Home/PostEditProduct/", { } ... 

और अब

$.post('@Url.Action("PostEditProduct","Home")', { } ... 

के साथ बदल दिया है और यह काम करता है।

+0

@ url.Action (..) का उपयोग करना हमेशा एमवीसी के साथ एक अच्छा निर्णय है! पथ को कभी भी हार्डकोड न करें, ताकि आप बाद में मार्गों को गतिशील रूप से बदल सकें। – Max

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