2013-02-19 21 views
25

का उपयोग किए बिना ASP.net में पृष्ठों पर मूल्यों को कैसे पास किया जाए, मैं अपने वेब पोर्टल के प्रदर्शन को बेहतर बनाने की कोशिश कर रहा हूं। मैं राज्य की जानकारी स्टोर करने के लिए सत्र का उपयोग कर रहा हूं।सत्र

लेकिन मैंने सुना है कि सत्र का उपयोग करने से एप्लिकेशन की गति कम हो जाएगी। एएसपीनेट में पेज भर में मूल्यों को पारित करने का कोई अन्य तरीका है।

+0

क्या आपने कैश की कोशिश की है? – ssilas777

+0

'सत्र' का उपयोग करना बुरा नहीं है लेकिन सत्र का उपयोग करने में कारक हो सकते हैं। उपयोगकर्ता का नहीं आपकी बैंडविड्थ सेवर क्षमता यदि आपके ऊपर उल्लिखित अच्छा है तो आप 'सत्र' का उपयोग कर सकते हैं। –

+0

@ ssilas777 सामान्यतः सभी उपयोगकर्ताओं के लिए 'कैश' समान है। तो उसके मामले में वह कैश का उपयोग नहीं कर सकता है। –

उत्तर

51

आप .. निम्न द्वारा एक से दूसरे पेज से मूल्यों को पारित कर सकते हैं

Response.Redirect 
Cookies 
Application Variables 
HttpContext 

Response.Redirect

सेट:

Response.Redirect("Defaultaspx?Name=Pandian"); 

प्राप्त करें:

string Name = Request.QueryString["Name"]; 

कुकीज़

सेट:

HttpCookie cookName = new HttpCookie("Name"); 
cookName.Value = "Pandian"; 

प्राप्त करें:

string name = Request.Cookies["Name"].Value; 

आवेदन चर

सेट:

Application["Name"] = "pandian"; 

प्राप्त करें:

string Name = Application["Name"].ToString(); 

यहां पूरी सामग्री देखें: Pass values from one to another

+6

'-1' और एप्लिकेशन। यदि आप वेबगार्डन या वेबफार्म का उपयोग करते हैं तो विशेष रूप से एप्लिकेशन काम नहीं कर रहा है! और अनुप्रयोग चर एक साधारण शब्दकोश <> है जो केवल पुराने एएसपी के साथ संगतता के लिए मौजूद है और इसका उपयोग नहीं किया जाना चाहिए। कुकीज़ भी पृष्ठ से पृष्ठ पर स्थानांतरण डेटा के लिए नहीं हैं। बहुत बुरा डिजाइन, अच्छा अभ्यास नहीं। – Aristos

+0

@Aristos, क्या -1 लागू होता है जब डेटा कुकी के रूप में संग्रहीत होता है? यदि प्रत्येक पृष्ठ को कुकी से डेटा पुनर्प्राप्त करना होगा और संशोधित मानों को कुकी में संग्रहीत करना होगा तो क्या डेटा कहीं और ** ** ** संग्रहीत करने में कोई मूल्य है? – user34660

+1

@ user34660 मुझे आपको समझ में नहीं आया ... – Aristos

22

इसे प्राप्त करने के कई तरीके हैं। मैं आपको हमारे दैनिक प्रोग्रामिंग जीवन चक्र में उपयोग किए जाने वाले 4 प्रकारों के बारे में संक्षेप में समझा सकता हूं।

कृपया नीचे दिए गए बिंदुओं के माध्यम से जाएं।

1 प्रश्न स्ट्रिंग।

FirstForm.aspx.cs

Response.Redirect("SecondForm.aspx?Parameter=" + TextBox1.Text); 

SecondForm.aspx.cs

TextBox1.Text = Request.QueryString["Parameter"].ToString(); 

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

FirstForm.aspx.cs

Response.Redirect("SecondForm.aspx?Parameter=" + Server.UrlEncode(TextBox1.Text)); 

SecondForm.aspx.cs

TextBox1.Text = Server.UrlDecode(Request.QueryString["Parameter"].ToString()); 

यूआरएल एन्कोडिंग

  1. Server.URLEncode
  2. HttpServerUtility.UrlDecode
संदर्भ वस्तु

एक और व्यापक रूप से इस्तेमाल विधि संदर्भ वस्तु के माध्यम से मूल्य से गुजर रहा है के माध्यम से

2. पासिंग मूल्य।

FirstForm.aspx.cs

TextBox1.Text = this.Context.Items["Parameter"].ToString(); 

SecondForm.aspx.cs

ध्यान दें कि हम Response.Redirect के बजाय Server.Transfer का उपयोग कर दूसरे पृष्ठ पर नेविगेट कर रहे हैं। हम में से कुछ मूल्यों को पारित करने के लिए सत्र ऑब्जेक्ट का भी उपयोग करते हैं। उस विधि में, मान ऑब्जेक्ट ऑब्जेक्ट में स्टोर किया जाता है और उसके बाद बाद में दूसरे ऑब्जेक्ट में सत्र ऑब्जेक्ट से निकाला जाता है।

3।पोस्टबैक

पृष्ठ को दूसरे फॉर्म में पोस्ट करके मूल्य पारित करने की तीसरी विधि। यहाँ इस बात का उदाहरण है:

FirstForm.aspx.cs

private void Page_Load(object sender, System.EventArgs e) 
{ 
    buttonSubmit.Attributes.Add("onclick", "return PostPage();"); 
} 

और हम एक जावास्क्रिप्ट फंक्शन फॉर्म पोस्ट करने के लिए पैदा करते हैं।

SecondForm.aspx.cs

function PostPage() 
{ 
    document.Form1.action = "SecondForm.aspx"; 
    document.Form1.method = "POST"; 
    document.Form1.submit(); 
} 
TextBox1.Text = Request.Form["TextBox1"].ToString(); 

यहाँ हम खुद के बजाय एक पृष्ठ पर प्रपत्र पोस्ट कर रहे हैं। आप इस विधि का उपयोग कर दूसरे पृष्ठ में दृश्यमान अमान्य या त्रुटि प्राप्त कर सकते हैं। इस त्रुटि को संभालने के लिए की जोड़ने PostBackURL संपत्ति से पार पेज पद वापस

ASP.NET 2.0 में, Microsoft इस समस्या को हल किया है के लिए नियंत्रण के PostBackURL संपत्ति जोड़कर EnableViewStateMac=false

4. एक अन्य विधि है डाल करने के लिए है क्रॉस पेज पोस्ट के लिए नियंत्रण वापस। कार्यान्वयन नियंत्रण की एक संपत्ति स्थापित करने का मामला है और आप कर रहे हैं।

FirstForm.aspx.cs

<asp:Button id=buttonPassValue style=”Z-INDEX: 102″ runat=”server” Text=”Button”   PostBackUrl=”~/SecondForm.aspx”></asp:Button> 

SecondForm.aspx.cs

TextBox1.Text = Request.Form["TextBox1"].ToString(); 

उपरोक्त उदाहरण में, हम बटन के PostBackUrl संपत्ति बताए जाते हैं हम करने के लिए पेज निर्धारित कर सकते हैं जो इसके बजाय पोस्ट करेगा। अगले पृष्ठ में, हम अनुरोध ऑब्जेक्ट का उपयोग कर पिछले पृष्ठ के सभी नियंत्रणों तक पहुंच सकते हैं।

क्लासिक अनुरोध ऑब्जेक्ट का उपयोग करने के बजाय आप पिछले पृष्ठ के नियंत्रण तक पहुंचने के लिए पिछला पृष्ठ वर्ग का भी उपयोग कर सकते हैं।

SecondForm.aspx

TextBox textBoxTemp = (TextBox) PreviousPage.FindControl(“TextBox1″); 
TextBox1.Text = textBoxTemp.Text; 

आपने गौर किया है, यह भी पृष्ठों के बीच मूल्य पास करने का एक सरल और साफ कार्यान्वयन है।

संदर्भ: MICROSOFT MSDN WEBSITE

खुश कोडन!

+1

वोट के लिए कोई कारण? –

+0

मुझे नहीं पता कि आपका नाम कैसे लिखना है, लेकिन जानकारी के लिए धन्यवाद। मेरे पास मेरे मास्टर में एक विधि है। पेज जो उपयोगकर्ता ऑब्जेक्ट को सत्र चर में प्राप्त/सेट करता है। मास्टर पेज पर विरासत में आने वाले लॉगिन पेज पर लॉग इन करने के बाद, वे संपर्क पृष्ठ का उपयोग करके एक ईमेल भेज सकते हैं जो मास्टर.पेज से भी प्राप्त होता है। हालांकि, संपर्क पृष्ठ के पेज_लोड ईवेंट पर, उपयोगकर्ता ऑब्जेक्ट शून्य है। मुझे नहीं पता क्यों। – jp2code

1

आप एक छिपी हुई फ़ील्ड को असाइन कर सकें, और

var value= Request.Form["value"] 
3

का उपयोग कर यदि यह पृष्ठों के बीच मान पास करने के लिए बस है इसे पुनः प्राप्त है और आप केवल एक अनुरोध के लिए यह आवश्यकता होती है। का प्रयोग करें Context.

प्रसंग

संदर्भ वस्तु एक भी अनुरोध के लिए एक एकल उपयोगकर्ता के लिए डेटा रखती है,, और यह केवल अनुरोध की अवधि के लिए एक समान होती है। संदर्भ कंटेनर बड़ी मात्रा में डेटा रख सकता है, लेकिन आम तौर पर यह डेटा के छोटे टुकड़े रखने के लिए उपयोग किया जाता है क्योंकि इसे अक्सर ग्लोबल.एक्सएक्स में हैंडलर के माध्यम से हर अनुरोध के लिए लागू किया जाता है। संदर्भ कंटेनर (पृष्ठ ऑब्जेक्ट से सुलभ या सिस्टम.Web.HttpContext.Current) को उन मानों को रखने के लिए प्रदान किया जाता है जिन्हें विभिन्न HttpModules और HttpHandlers के बीच पारित होने के लिए की आवश्यकता होती है। यह का उपयोग पूरे अनुरोध के लिए प्रासंगिक जानकारी रखने के लिए भी किया जा सकता है। उदाहरण के लिए, IBuySpy पोर्टल Global_asax में Application_BeginRequest ईवेंट हैंडलर के दौरान इस कंटेनर में कुछ कॉन्फ़िगरेशन जानकारी संग्रहीत करता है। ध्यान दें कि यह केवल वर्तमान अनुरोध के लिए के दौरान लागू होता है; अगर आपको अगले अनुरोध के लिए अभी भी के आसपास कुछ चाहिए, तो ViewState का उपयोग करने पर विचार करें। कॉन्टेक्स्ट संग्रह से डेटा सेट करना और प्राप्त करना आपके द्वारा को अन्य संग्रह ऑब्जेक्ट्स, जैसे सत्र और कैश के साथ पहले से ही सिंटैक्स का उपयोग करता है। दो सरल उदाहरण यहां दिए गए हैं:

// Add item to 
Context Context.Items["myKey"] = myValue; 

// Read an item from the 
Context Response.Write(Context["myKey"]); 

http://msdn.microsoft.com/en-us/magazine/cc300437.aspx#S6

ऊपर का उपयोग करना। यदि आप Server.Transfer करते हैं तो संदर्भ में सहेजे गए डेटा अब अगले पृष्ठ पर उपलब्ध होंगे। आपको इस डेटा को हटाने/लिखने के साथ खुद को चिंता करने की ज़रूरत नहीं है क्योंकि यह केवल वर्तमान अनुरोध के लिए है।

+0

क्षमा करें मुझे और अधिक स्पष्ट होना चाहिए था। जवाब अब अद्यतन किया गया है। –

+0

हाँ, ठीक है, जब आप सर्वर बनाते हैं। ट्रांसफर करें यह काम करता है। कुकीज़ के लिए – Aristos

1

आप उपयोग कर सकते हैं क्वेरी स्ट्रिंग एक से दूसरे पेज से मूल्य पारित करने के लिए ..

1।..

Response.Redirect("Default3.aspx?value=" + txt.Text + "& number="+n); 

2.Retrive पेज यू इन तरीकों में से किसी भी उपयोग करके चाहते में मूल्य querystring का उपयोग कर मान पास

Method1:

string v = Request.QueryString["value"]; 
    string n=Request.QueryString["number"]; 

Method2 :

 NameValueCollection v = Request.QueryString; 
    if (v.HasKeys()) 
    { 
     string k = v.GetKey(0); 
     string n = v.Get(0); 
     if (k == "value") 
     { 
      lbltext.Text = n.ToString(); 
     } 
     if (k == "value1") 
     { 
      lbltext.Text = "error occured"; 
     } 
    } 

नोट: विधि 2 सबसे तेज़ तरीका है।