2012-01-03 89 views
5

即使文本框爲空,甚至沒有在回發中觸及,爲什麼以下結果爲真正的if子句? :什麼時候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"); 
} 
%> 

該文本框實際上是否在回發中包含空字符串(「」)?


爲什麼下面的結果在第一個頁面上加載一個真正的if子句,而不是在回發中? :

<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

禁用自動友好的URL在asp.net 4.5 http://stackoverflow.com/a/40650127/184572 – 2016-11-17 08:42:30

回答

10

首先,我回答你的問題:

第一頁負載是GET,回發是POST(故名回)。 Request.Form已填充只有如果通過表單POST加載頁面。

  • 在第一頁加載時,Request.Form是一個空集合。由於Request.FormNameValueCollection,accessing a non-existent entry returns null。因此,在第一頁加載時,Request.Form["whatever"]返回null

  • 回傳後,Request.Form填充了值。由於HTTP POST不知道null值,因此Request.Form["whatever"]會爲存在但爲空的字段返回空字符串。

如果你想避免x != null && x != ""模式,使用String.IsNullOrEmptynull 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

謝謝你回答我的問題,但不涉及我的問題/問題的答案是沒有必要的,因爲我已經瞭解了內置的WebForms功能(這也是爲什麼我沒有首先包含WebForms標記的原因,但後來不得而知) 可能想知道爲什麼我沒有使用MVC,但有一個簡單的答案:從零開始學習HTML/JavaScript + MONO。 – Birdman 2012-01-04 09:47:29

+0

@亞歷克斯:啊,好的,我明白了。無論如何,我都會留下第二部分,以防將來有人閱讀這個問題。 – Heinzi 2012-01-04 12:43:17

2

Request.FormNameValueCollection,如果指定key沒有找到返回null,返回值(即空字符串)否則。

你可以使用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,爲什麼它的返回值爲null,如果控件不存在於窗體中並附加到頁面的外部 – 2017-02-22 09:33:19

相關問題