Bir*_*man 6 html asp.net webforms
为什么以下结果都是真正的if子句,即使文本框是空的,甚至没有触及回发?:
<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");
}
%>
Run Code Online (Sandbox Code Playgroud)
文本框实际上是否在回发中包含空字符串("")?
为什么以下结果导致第一页上的true 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");
}
%>
Run Code Online (Sandbox Code Playgroud)
为了获得成功和预期的结果,我必须使用以下内容:
<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");
}
%>
Run Code Online (Sandbox Code Playgroud)
Hei*_*nzi 10
首先,让我回答你的问题:
第一页负载是GET,回发是POST(故名后回).仅在通过表单POST加载页面时才Request.Form填充.
在第一页加载时,Request.Form是一个空集合.由于Request.Form是a NameValueCollection,访问不存在的条目将返回null.因此,第一页上的Request.Form["whatever"]返回null加载.
回发后,Request.Form充满了价值观.由于HTTP POST不知道null值,Request.Form["whatever"]因此对于存在但为空的字段返回空字符串.
如果要避免x != null && x != ""使用该模式,请使用String.IsNullOrEmpty或null合并运算符:(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<%
}
%>
Run Code Online (Sandbox Code Playgroud)
由于TextBox.Text默认为"",因此无需在null此处进行检查.