2012-01-03 67 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

相关问题