2013-01-22 7 views
7

मुझे इस सवाल को इस तथ्य के साथ पेश करने दें कि मैं एमवीसी के लिए बहुत नया हूं।क्या एमवीसी Asp.net में आंशिक दृश्य प्रस्तुत करने के बाद जावास्क्रिप्ट फ़ंक्शन को बंद करना संभव है?

मेरे पास एक उदाहरण है जहां मैं आंशिक दृश्य में एक डेवएक्सप्रेस ग्रिड प्रस्तुत कर रहा हूं।

@Html.Partial("MyGridPartial", Model) 

मैं इस पल है कि मॉडल इस आंशिक दृश्य प्रस्तुत करना के माध्यम से भर जाने के बाद में एक जावास्क्रिप्ट समारोह शुरू की जरूरत है। मैंने इसके माध्यम से ऐसा करने का प्रयास किया। :

settings.ClientSideEvents.EndCallback 

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

+0

तुम्हारा मतलब है "सर्वर पर JavaScript चला जब वह एचटीएमएल के आधे प्रदान की गई है? " –

+0

असल में, मुझे आंशिक दृश्य प्रस्तुत करने के बाद क्लाइंटसाइड पर आंशिक दृश्य द्वारा प्रदान किए गए डेटा (मॉडल) तक पहुंच की आवश्यकता है। मैंने जावास्क्रिप्ट फ़ंक्शन को बंद करने के कई तरीकों की कोशिश की है ताकि मैं कुछ क्लाइंटसाइड कोड चला सकूं जो मॉडल के खिलाफ हेरफेर करेगा, लेकिन मैंने जो भी प्रयास किया है वह गंभीर रूप से असफल रहा है। –

उत्तर

5

यदि आप इस आंशिक को एक दृश्य के सामान्य प्रवाह के हिस्से के रूप में प्रस्तुत कर रहे हैं, तो उत्तर नहीं है।

इसका कारण यह है कि आंशिक दृश्य को प्रस्तुत करने से पहले आंशिक को स्ट्रिंग में परिवर्तित किया जाता है। उस समय, ब्राउज़र द्वारा आपके कोई मार्कअप नहीं देखा गया है, कोई jscript पढ़ा नहीं गया है।

हैं, तो दूसरी ओर, आप आंशिक अपने JQuery तैयार समारोह में प्रदान की गई:

$(document).ready(function() {

मुझे लगता है कि आप (एक कार्रवाई विधि द्वारा आंशिक कहा जाता हो जाता है कि) एक कार्य आंशिक उपयोग करने के लिए की आवश्यकता होगी । कार्रवाई partials (शांति से) यूआरएल को संदर्भित करके अपने JQuery तैयार समारोह के भीतर बुलाया जा सकता है:

$('#divMyGridPartial').load('/Grids/MyGridPartial/{id}'); 

और किसी भी jscript/jQuery कार्यों तैयार श्रृंखला के भीतर कहा जा सकता है अप का पालन करें।

एक्शन आंशिक का दूसरा लाभ, मॉडल को क्रिया विधि के भीतर बनाया गया है और आपको जो चाहिए उसे प्रासंगिक रूप से बनाया जा सकता है (आदर्श रूप से पास की गई आईडी को बंद करना)।

+0

दोनों सही हैं, मुझे अंत में यह काम मिल गया लेकिन मैं उपरोक्त दोनों उत्तरों की तुलना में इसे अलग-अलग कर रहा हूं। –

+4

@ यूसरस्मिथ, आपने इसे कैसे कार्यान्वित किया? –

6

यदि यह एक आंशिक दृश्य है जिसे आप serverthen डेव की विधि पर एक दृश्य में प्रस्तुत कर रहे हैं तो सबसे अच्छा काम करेगा। बस अपने कोड को डोम तैयार घटना में वायर-अप करें।

$(document).ready(function(){ 
    //Javascript logic to fire goes here 
}); 

या आप आशुलिपि संस्करण prever अगर ...

$(function(){ 
    //Javascript logic to fire goes here 
}); 

आप एक आंशिक मानना ​​है कि अजाक्स के माध्यम से भरी हुई जा रही है तो एक ही विधि का काम करेंगे प्रतिपादन कर रहे हैं। jQuery अगर मैं सही ढंग से याद करता हूं तो डीओएम से जुड़ा हुआ हो जाने पर एचटीएमएल के माध्यम से क्लाइंट को वापस भेज दिया गया एचटीएमएल में जावास्क्रिप्ट चलाएगा (डीओएम से जुड़ा हुआ एक बार फायरिंग के बारे में मुझे याद आ रही है, लेकिन मुझे विश्वास है load() विधि की एक विशेषता है), यह मानते हुए कि जावास्क्रिप्ट को आप चलाने के लिए चाहते हैं प्रतिक्रिया में है। यदि यह अजाक्स अनुरोध भेजते हुए मूल पृष्ठ में है तो आप पूरी स्थिति में इसे हुक करने के लिए सबसे अच्छी शर्त है।(मैं यहाँ क्लाइंट की तरफ पैरामीटर पॉप्युलेट कर रहा हूँ)

$("#wrapperAwaitingContent").load("/Grids/MyGridPartial", {id: null /*parameters*/}, function(text, status, xhr){ 
    //Javascript logic to fire goes here 
}); 

मेरे लिए .load() कॉल में उपयोग किए यूआरएल सर्वर पर UrlHelper का उपयोग कर

$("#wrapperAwaitingContent").load("@Url.Action("MyGridPartial", "Grids")", {id: null /*parameters*/}, function(text, status, xhr){ 
    //Javascript logic to fire goes here 
}); 

तुम भी का विकल्प होता है हल हो गई है Unobtrusive अजाक्स का उपयोग कर ऐसा कुछ कर रहे हैं। (मैं यहाँ सर्वर साइड पर पैरामीटर पॉप्युलेट कर रहा हूँ)

@Ajax.ActionLink("Load Data", "MyGridPartial", "Grids", new { id = null/*parameters*/ }, new AjaxOptions() { UpdateTargetId = "wrapperAwaitingContent", OnComplete="onCompleteMethodName" }) 

अधिक गुण आप HTML और विधि कॉल करने के प्राप्त करने के लिए तत्व के अलावा अन्य AjaxOptions के लिए सेट कर सकते हैं इसके समाप्त होने पर कर रहे हैं, लेकिन मुझे लगता है मैं 'll पुन: उपयोग के कार्यों के लिए एक साझा जावास्क्रिप्ट फाइल में परिभाषित करने और उन्हें पॉप्युलेट केवल अगर वे पहले से ही वहाँ से आबादी वाले नहीं कर रहे हैं, कुछ इस तरह ...

$("a[data-ajax='true']").each(function() { 
    var ajaxUpdate = $(this).closest("data-ajax-container"); 
    $(this).attr("data-ajax-update", $(this).attr("data-ajax-update") ? $(this).attr("data-ajax-update") : ajaxUpdate); 
    $(this).attr("data-ajax-mode", $(this).attr("data-ajax-mode") ? $(this).attr("data-ajax-mode") : "replace"); 
    $(this).attr("data-ajax-success", $(this).attr("data-ajax-success") ? $(this).attr("data-ajax-success") : "AjaxSuccess"); 
    $(this).attr("data-ajax-complete", $(this).attr("data-ajax-complete") ? $(this).attr("data-ajax-complete") : "AjaxComplete"); 
    $(this).attr("data-ajax-failure", $(this).attr("data-ajax-error") ? $(this).attr("data-ajax-error") : "AjaxError"); 
}); 
+0

दोनों सही हैं, मुझे अंततः यह काम मिल गया है, लेकिन मैंने उपर्युक्त उत्तरों दोनों की तुलना में इसे अलग कर दिया है –

+3

@ यूसरस्मिथ कृपया अपने समाधान को –

+0

दुर्भाग्यवश पोस्ट करें, मैं Devexpress का उपयोग करने से दूर चले गए हैं और यह कोड नहीं मिल रहा है कहीं भी। उपरोक्त दान ने थोड़ी देर पहले एक ही चीज़ से पूछा और उस समय तक मैं पूरी परियोजना को लागू करने का एक पूरी तरह से अलग मार्ग चला गया था। मेरा मतलब डैन को जवाब देना था, लेकिन कोडिंग के पहाड़ के बीच ट्रैक खो गया था। –

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