2009-08-21 15 views
8

पर मूल्य खो देता है निम्नलिखित कोड पर विचार करें:,ASP.NET निजी सदस्य क्षेत्र पोस्टबैक

public partial class TeacherControlPanel : System.Web.UI.Page 
    { 
     protected string username = string.Empty; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      username = (string)Request.QueryString["username"]; 

      Ice_Web_Portal.BO.Teacher teacher = Ice_Web_Portal.BO.Teacher.GetTeacherByUsername(username); 

      if (teacher != null) 
      { 
       labUsername.Text = username; 
       labName.Text = teacher.TeacherName; 
       labTeacherCode.Text = teacher.TeacherCode; 

       Dept dept = teacher.Department; 

       if (dept != null) 
       { 
        labDepartment.Text = dept.DeptName; 
       } 
      } 
      else 
      { 
       //labErrorMessage.Text = "No teacher found"; 
      } 
     } 

     protected void btnSendMail_Click(object sender, EventArgs e) 
     { 
      Response.Redirect(@"~/Teacher/TeacherComposeMail.aspx?username=mahabub" + username);    
     } 
} 

इस कोड में जब मैं 'उपयोगकर्ता नाम' घोषणा कर रहा हूँ निजी के रूप में, यह बाद में पद पीठ के बाद अशक्त करने के लिए आरंभ नहीं हो जाता।

क्यों?

रहस्य क्या है?

+1

क्या आप कह रहे हैं कि कोड लिखित के रूप में काम करता है, लेकिन जब आप उपयोगकर्ता को एक निजी चर में बदलते हैं तो यह विफल हो जाता है? –

+0

क्या यह शून्य या स्ट्रिंग के लिए शुरू किया गया है। लक्षण? – Martin

+0

@ मार्टिन, यह शून्य है। – anonymous

उत्तर

15

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

#region UserName 
public string UserName 
{ 
    get 
    { 
     if (this.ViewState["UserName"] == null) 
      return string.Empty; 

     return (string)this.ViewState["UserName"]; 
    } 
    set { this.ViewState["UserName"] = value; } 
} 
#endregion 
+0

लेकिन वह 'उपयोगकर्ता नाम = (स्ट्रिंग) अनुरोध कर रहा है .QueryString ["उपयोगकर्ता नाम"];' प्रत्येक पृष्ठ लोड पर। – Kobi

+0

@ डेविड बसराब, मैं समाधान का अनुरोध नहीं कर रहा हूं। मैं प्रभाव के अंतर को जानने की कोशिश कर रहा हूं। इस मामले में निजी बनाम सुरक्षित। – anonymous

5

हर बार जब आप भी बटन क्लिक घटनाओं की तरह "सरल" बातों के लिए किसी भी पोस्टबैक करते हैं, आप पृष्ठ श्रेणी का एक नया उदाहरण के साथ काम कर रहे हैं। वह ASP.Net 101 है।

+0

यदि आप किसी नए पृष्ठ पर रीडायरेक्ट करते हैं या एक नई क्वेरी स्ट्रिंग वाला पृष्ठ लोड करते हैं, तो यह पोस्टबैक नहीं है। यदि आप किसी क्वेरी स्ट्रिंग वाले किसी पृष्ठ पर बटन क्लिक करते हैं, तो वह एक पोस्टबैक है और क्वेरी स्ट्रिंग को पोस्टबैक http अनुरोध के साथ भेजा जाता है। किसी भी तरह से, यह अभी भी पृष्ठ वर्ग का एक नया उदाहरण है। –

+0

मुझे संरक्षित बनाम निजी से संबंधित मेरा जवाब नहीं मिला। – anonymous

1

उपयोगकर्ता नाम फ़ील्ड को निजी या संरक्षित के रूप में घोषित करने से इस स्थिति पर कोई असर नहीं पड़ता है। एकमात्र असर सुरक्षित/निजी वर्ग के बाहर या विरासत सदस्यों के बाहर चर के अभिगम्यता होगी।

मेरा मानना ​​है कि यह एक जीवन चक्र समस्या है।

जब आप पहली बार इस पृष्ठ पर नेविगेट करते हैं, तो उपयोगकर्ता नाम का केवल तभी मूल्य होगा जब क्वेरी स्ट्रिंग अनुरोध के लिए सेट की गई थी। इसलिए, "/TeacherControlPanel.aspx" के पास कोई उपयोगकर्ता नाम नहीं होगा, लेकिन "/TeacherControlPanel.aspx?username=SomeUserName" होगा। इन मामलों में, फ़ील्ड उपयोगकर्ता नाम केवल तभी मूल्य होगा जब कोई सेट हो। और यदि कोई क्वेरीस्ट्रिंग सेट नहीं है, तो जब पृष्ठ बटन पर क्लिक करता है तो ईवेंट क्लिक करें, लोड आग लगेगा, कोई क्वेरी स्ट्रिंग सेट का अर्थ यह नहीं है कि उपयोगकर्ता नाम शून्य होगा, जिसका अर्थ है कि क्लिक ईवेंट में रीडायरेक्ट स्ट्रिंग में शामिल करने के लिए कुछ भी नहीं होगा।

तो सवाल यह है कि, आपके आवेदन में, आप किस नेविगेशन पथ का उपयोग कर रहे हैं TeacherControlPanel.aspx पर जाने के लिए?

+2

इसके अतिरिक्त, एक संरक्षित क्षेत्र पृष्ठ पर दिखाई देगा (TeacherControlPanel.aspx, <% %> कथन पर), जबकि एक निजी क्षेत्र नहीं है। – Kobi

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