2012-01-03 19 views
5

टेक्स्टबॉक्स खाली होने के बावजूद क्लॉज के बाद निम्न परिणाम क्यों सही हैं और पोस्टबैक पर भी स्पर्श नहीं किए गए हैं? :Request.Form ["name"] शून्य कब और खाली स्ट्रिंग कब होता है?

<form action="Default.aspx" runat="server" method="post" id="newform"> 
<input type="text" id="name" runat="server"/> 
</form> 

<% 
if (Request.Form["name"] != null) // Prints out "Name OK" on postback. 
{ 
    Response.Write("<br/>"); 
    Response.Write("Name OK"); 
} 
%> 

क्या टेक्स्टबॉक्स में वास्तव में एक पोस्टबैक पर खाली स्ट्रिंग ("") होती है?


यदि पहले पृष्ठ लोड पर क्लॉज सही है लेकिन पोस्टबैक पर नहीं है तो निम्नलिखित परिणाम क्यों सही हैं? :

<form action="Default.aspx" runat="server" method="post" id="newform"> 
<input type="text" id="name" runat="server"/> 
</form> 

<% 
if (Request.Form["name"] != "") // Prints out "Name OK" on first page load, but not on postback. 
{ 
    Response.Write("<br/>"); 
    Response.Write("Name OK"); 
} 
%> 

एक सफल और अपेक्षित परिणाम प्राप्त करने के लिए मैं निम्नलिखित का उपयोग करना:,

<form action="Default.aspx" runat="server" method="post" id="newform"> 
<input type="text" id="name" runat="server"/> 
</form> 

<% 
if (Request.Form["name"] != null && Request.Form["name"] != "") 
{ 
    Response.Write("<br/>"); 
    Response.Write("Name OK"); 
} 
%> 
+0

asp.net में अक्षम ऑटो अनुकूल यूआरएल 4.5 http://stackoverflow.com/a/40650127/184572 –

उत्तर

10

सबसे पहले, मुझे अपने प्रश्न का उत्तर दे:

पहले पृष्ठ लोड एक मिलता है, Postbacks एक पोस्ट (इसलिए नाम पद वापस) कर रहे हैं। Request.Formकेवल पॉप्युलेट किया गया है, यदि पृष्ठ पोस्ट फॉर्म के रूप में लोड किया गया है।

  • पहले पृष्ठ लोड पर, Request.Form एक खाली संग्रह है। चूंकि Request.FormNameValueCollection, accessing a non-existent entry returns null है। इस प्रकार, Request.Form["whatever"] पहले पृष्ठ लोड पर null लौटाता है।

  • पोस्टबैक के बाद, Request.Form मूल्यों से भरा हुआ है। चूंकि HTTP पोस्ट को null मानों के बारे में पता नहीं है, Request.Form["whatever"] फ़ील्ड के लिए खाली स्ट्रिंग देता है जो खाली है लेकिन खाली है।

आप, x != null && x != "" पैटर्न से बचने String.IsNullOrEmpty उपयोग करना चाहते हैं या null coalescing operator: (x ?? "") != ""


दूसरी ओर, तुम सिर्फ निर्मित WebForms सुविधाओं के बजाय खुद के Request.Form पार्स करने की का उपयोग करके बहुत आसान अपने जीवन बना सकता है: "" को

<form runat="server"> 
    <asp:TextBox ID="nameBox" runat="server" /> 
    <asp:Button Text="Do Postback" runat="server" /> 
</form> 

<% 
    if (nameBox.Text != "") 
    { 
     %><br />Name OK<% 
    } 
%> 

TextBox.Text के बाद से चूक, यहां null की जांच करने की आवश्यकता नहीं है।

+0

मेरे सवाल का जवाब देने के लिए धन्यवाद, लेकिन मेरे प्रश्न/समस्या से संबंधित उत्तर अनावश्यक नहीं था क्योंकि मुझे पहले से ही अंतर्निहित वेबफॉर्म सुविधाओं के बारे में पता था (यही कारण है कि मैंने पहली जगह में वेबफॉर्म टैग शामिल नहीं किया था, लेकिन बाद में इसे बाद में) आप हो सकता है कि मैं इसके बजाय एमवीसी का उपयोग क्यों नहीं कर रहा हूं, लेकिन इसके लिए एक आसान जवाब है: स्क्रैच + एमओएनओ से एचटीएमएल/जावास्क्रिप्ट सीखना। – Birdman

+0

@Alex: आह, ठीक है, मैं समझता हूं। मैं वैसे भी दूसरे भाग को छोड़ दूंगा, बस अगर भविष्य में किसी को प्रश्न पढ़ने में मददगार हो। – Heinzi

2

Request.FormNameValueCollection, जो null लौटाता है यदि निर्दिष्ट key नहीं पाया जाता है मान देता है (जो एक खाली है स्ट्रिंग) अन्यथा।

आप string.IsNullOrEmpty() विधि का उपयोग कर सकते हैं।

if (!string.IsNullOrEmpty(Request.Form["name"])) 
{ 
    Response.Write("<br/>"); 
    Response.Write("Name OK"); 
} 
2

Request.Form["ControlName"]null लौटाता है यदि नियंत्रण फॉर्म पर मौजूद नहीं है।

यदि नियंत्रण मौजूद है, लेकिन इसमें null या खाली मान है, तो Request.Form["ControlName"] हमेशा String.Empty लौटाएगा।

तो यह अच्छा अभ्यास, बजाय (Request.Form["ControlName"] != null) की तुलना की है, का उपयोग (!String.IsNullOrEmpty(Request.Form["ControlName"]))

+0

हाय @NSNoob, अगर नियंत्रण के अंदर मौजूद नहीं है और पृष्ठ में बाहर संलग्न है तो इसकी वापसी शून्य क्यों होती है –

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