2010-01-20 12 views
11

यहां मैं एएसपी.NET में क्या करने की कोशिश कर रहा हूं:रनटाइम पर गतिशील रूप से किसी अन्य एएसपीएक्स के डीआईवी में एएसपीएक्स कैसे प्रदर्शित करें?

Main.aspx नामक एक पृष्ठ बनाएं। इस पृष्ठ में एक डीआईवी और एक बटन है।

ब्राउज़र मेन.एएसपीएक्स लोड करता है। फिर जब मैं बटन पर क्लिक करता हूं, तो मैं मुख्य रूप से Main.aspx में DIV में पृष्ठ पृष्ठ 99.aspx लोड करना चाहता हूं, लेकिन मेन.एक्सएक्स के बिना पोस्टबैक की आवश्यकता होती है।

तो, Main.aspx एक बार लोड होता है, और उसके बाद Main.aspx में प्रदर्शित सभी सामग्री अलग-अलग .aspx पृष्ठों से आती है।

Ps। मैं ऊपर के रूप में एक समाधान की तलाश में हूँ, लेकिन फ्रेम का उपयोग नहीं कर रहा हूँ।

अद्यतन 1 मुझे यह उल्लेख करना चाहिए कि पृष्ठ 99 एक साधारण HTML पृष्ठ नहीं है। इसमें वेब नियंत्रण होंगे।

+0

किसी के पास पूर्वजों के वर्ग का उपयोग करने का अच्छा जवाब था, लेकिन दुर्भाग्यवश ऐसा लगता है कि यह हटा दिया गया है। क्या वह व्यक्ति जवाब वापस ला सकता है? – Liao

उत्तर

4

जहां तक ​​मुझे पता है, iframes के उपयोग को छोड़कर, एक एएसपीएक्स पेज को दूसरे में लोड करने का कोई तरीका नहीं है।

पोस्टबैक या AJAX के साथ, आप इसके बजाय UserControls (ascx) का उपयोग कर सकते हैं। वे वही सामग्री रख सकते हैं जो एक पृष्ठ वैसे भी हो सकता है, या मास्टरपेज का उपयोग कर सकते हैं।

यदि आप कोई पोस्टबैक नहीं चाहते हैं, तो AJAX शायद जाने का तरीका है, फिर भी, यह आपको एक एएसपीएक्स पेज को दूसरे में लोड करने की अनुमति नहीं देता है, केवल उस पृष्ठ की सामग्री को बदलने के लिए (आप बीच में अन्य बातें)।

मुझे वेब विकास के लिए अन्य प्लेटफ़ॉर्म के बारे में निश्चित नहीं है, हालांकि, आपके पास एक ऐसा समाधान हो सकता है जो आप करना चाहते हैं, इसलिए यदि एएसपीनेट "जरूरी" नहीं है, तो आपको अन्य प्लेटफ़ॉर्म की जांच करने पर विचार करना चाहिए।

+0

तो, यदि पृष्ठ 99 इसके बजाय उपयोगकर्ता नियंत्रण है, तो यह "एम्बेडिंग" रनटाइम पर किया जा सकता है जब बटन AJAX का उपयोग करके क्लिक किया जाता है? [क्या आप मुझे कुछ उदाहरणों के बारे में बता सकते हैं, क्योंकि मुझे ऐसा करने के बारे में कोई विशिष्ट जानकारी नहीं मिली है (इसमें शामिल जानकारी शामिल है, लेकिन यह मेरे मामले में काम नहीं करेगा)।] – Liao

+0

@ लियो - आपको चाहिए अपडेटपेनल के बारे में पढ़ें: http://www.asp.net/Ajax/Documentation/Live/overview/UpdatePanelOverview.aspx – SirDemon

+0

मैंने इसके बारे में कुछ पढ़ा है, लेकिन ज्यादा नहीं; उस पर और अधिक पढ़ना होगा (कुछ मामलों में यह धीरे-धीरे धीमा है)। – Liao

0

शायद मुझे कुछ याद आ रहा है। लेकिन आप इस मामले में UFrame का उपयोग कर सकते हैं।

http://msmvps.com/blogs/omar/archive/2008/05/24/uframe-goodness-of-updatepanel-and-iframe-combined.aspx

+0

यूफ्रेम अभी भी एक आईफ्रेम का उपयोग करता है, जो सवाल के अनुसार एक विकल्प नहीं था। – SirDemon

+0

@SirDemon, UFrame इस लेख में वर्णित उमर के रूप में IFrame का उपयोग नहीं करता है। http://www.codeproject.com/KB/aspnet/uframe.aspx –

6

आप iframes का उपयोग नहीं करना चाहते हैं, तो आप बहुत अच्छी तरह से HTML के वस्तु तत्व का उपयोग कर सकते हैं। देखने के लिए यहां देखें और एचटीएमएल उदाहरण। आप बहुत अच्छी तरह से इस aspx के लिए भी कुछ परिवर्तन के साथ aspx बटन आदि

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" 
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
<title>mouseover image position</title> 
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> 

<style type="text/css"> 
/*<![CDATA[*/ 
body 
    { 
    background-color:#aaaaff; 
    } 
#one 
    { 
    position:absolute; 
    left:50%; 
    top:50%; 
    margin:-150px 0 0 -250px; 
    } 
object 
    { 
    width:500px; 
    height:300px; 
    border:solid 1px #000000; 
    } 
/*//]]>*/ 
</style> 

<script type="text/javascript"> 
//<![CDATA[ 
// written by: Coothead 
function updateObjectIframe(which){ 
    document.getElementById('one').innerHTML = '<'+'object id="foo" name="foo" type="text/html" data="'+which.href+'"><\/object>'; 
} 

//]]> 
</script> 

</head> 
<body> 

<div id="one"> 
<object id="foo" name="foo" type="text/html" data="http://www.w3schools.com/"></object> 
</div> 
<div> 
<a href="http://www.google.com" onclick="updateObjectIframe(this); return false;">this is an object test not an iframe test</a> 
</div> 

</body> 
</html> 
+0

यह बहुत अच्छा और सुपर सरल है! एक तरफ, जब चीजों का एक साधारण समाधान होता है, तो कभी-कभी आप सोचते हैं "क्या यह इतना आसान हो सकता है!"। क्या इस दृष्टिकोण में कोई गड़बड़ी/चेतावनी है जो आप सोच सकते हैं? – Liao

+0

इस दृष्टिकोण के साथ एक संभावित गड़बड़ी (यदि आपका आंतरिक पृष्ठ वास्तव में एएसपीएक्स है) यह है कि आपके विचार दो पेजों के साथ स्टेटस और पोस्टबैक एक-दूसरे के साथ संघर्ष कर सकते हैं, हालांकि कामकाज हैं। –

+0

आम तौर पर एचटीएमएल दृष्टिकोण काम नहीं करता है। मेरे मामले में, यह रिपोर्ट यूआरएल प्रस्तुत करने में सक्षम नहीं है। यह क्रॉस-स्क्रिप्टिंग समस्या है जो मुझे लगता है लेकिन यह व्यवस्थापक खाते के माध्यम से पहुंचने पर काम कर रहा है जिसके माध्यम से आईआईएस में पेज होस्ट किए गए हैं। मुझे इसका सामना करना पड़ रहा है, किसी अन्य दृष्टिकोण के साथ जाने की जरूरत है। –

0

के लिए संपत्ति OnClientClick का उपयोग कर मुझे लगता है कि होगा तो आप इस AJAX और सर्वर पर एक वेब विधि का उपयोग कर सकता है उस तरह उपयोग कर सकते हैं,।

पृष्ठ पर बटन, डीईवी में लोड करने के लिए सही पृष्ठ के विभिन्न तर्कों के साथ, AJAX का उपयोग करके वेब विधि को कॉल करता है। वेब विधि सामान्य वेब अनुरोध का उपयोग कर सही पृष्ठ लोड करती है।

उदाहरण के लिए:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://servername/filename.aspx"); 
WebResponse response = request.GetResponse(); 

तो विधि एचटीएमएल ASPX फ़ाइल वापस ग्राहक के लिए द्वारा उत्पन्न लौट आते हैं। जब क्लाइंट कॉलबैक प्राप्त करता है, तो यह HTML को अन-एन्कोड कर सकता है और उसे div में डाल सकता है।

उदाहरण के लिए:

var startOfHTML = response.indexOf('&lt;'); 
var endOfHTML = response.indexOf('</string>'); 

response = response.substring(startOfHTML, endOfHTML); 
response = response.replace(/&lt;/g, "<"); 
response = response.replace(/&gt;/g, ">"); 

var div = document.getElementById("myDIV"); 
div.innerHTML = response; 
+0

मुझे लगता है कि काम कर सकता है; लेकिन मुझे लगता है कि पृष्ठ 99 पर वेब नियंत्रण होने पर दृष्टिकोण काम नहीं करेगा। क्या मैं सही हू? – Liao

+1

आप पेज में एकाधिक एचटीएमएल, बॉडी और हेड टैग डालने की कोशिश कर रहे हैं। व्यूस्टेट फ़ील्ड को भी डुप्लिकेट किया जाएगा, इसलिए वापस पोस्ट करने की संभावना अब और काम नहीं करेगी, और जैसा कि आप सही ढंग से इंगित करते हैं, और पेज 99 पर नियंत्रण (यदि यह काम करता है) पूरे पेज को पोस्टबैक करने का कारण बनता है, और आवश्यक पोस्टबैक जानकारी निश्चित रूप से नहीं मिलती पृष्ठ 99 पर वापस चला गया, लेकिन इसके बजाय मूल पृष्ठ के साथ समाप्त हो जाएगा (संभवत: "नियंत्रण पेड़ जिसमें व्यूस्टेट लोड किया जा रहा है, उस नियंत्रण पेड़ से मेल खाना चाहिए जिसका उपयोग पिछले अनुरोध के दौरान व्यूस्टेट को सहेजने के लिए किया गया था" त्रुटि) –

+0

@ मार्टिन, बहुत अच्छे अंक मैंने फ्रेम की कमी के आधार पर माना था कि 'बच्चे' पृष्ठ काफी बुनियादी थे। सवाल तब से अपडेट किया गया है। – Coxy

1

आप AJAX टूलकिट यह संभव हो जाना चाहिए उपयोग कर रहे हैं एक Webcontrol बजाय एक ASPX पेज का उपयोग कर यह करने के लिए।

यदि आप एएसपीएक्स पृष्ठों का उपयोग करके और इस आईफ्रेम का उपयोग किए बिना इस विचार को आगे बढ़ाने का प्रयास करते हैं, तो आप पाएंगे कि जावास्क्रिप्ट चर नाम और तत्व आईडी के लिए कोई अलगाव नहीं है, इसलिए यदि आप एएसपीएक्स की सामग्री को प्रस्तुत करते हैं तो लगभग संघर्षों की गारंटी देते हैं आंतरिक HTML का उपयोग कर एक div; पृष्ठ निश्चित रूप से आंशिक पोस्टबैक करने में सक्षम नहीं होगा जैसा कि मुझे लगता है कि आप चाहेंगे।

इसके बजाए वेबकंट का उपयोग करना: यदि आप पहले से नहीं हैं, तो एक बेहतर समाधान होगा और अद्यतन पैनेल नियंत्रण का उपयोग करें। या तो इस पैनल के अंदर वेब नियंत्रकों को गतिशील रूप से लोड और अनलोड करें (लोडकंट्रोल() का उपयोग करके), या इसके अंदर एक मल्टीव्यू नियंत्रण रखें और इस सामग्री को बदलने के अनुकरण के लिए सक्रिय दृश्य बदलें।

अद्यतन पैनेल अपनी सामग्री को पूर्ण पोस्टबैक (पेज रीफ्रेश) के बिना अपडेट करने की अनुमति देगा।

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