为什么即使文本框是空的并且甚至没有触及回发,以下结果也会导致 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");
}
%>
回发时文本框是否真的包含一个空字符串 ("")?
为什么以下结果在第一页加载时出现 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");
}
%>
为了获得成功和预期的结果,我必须使用以下内容:
<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");
}
%>
最佳答案
首先,让我回答你的问题:
第一个页面加载是 GET,回传是 POST(因此得名 postback)。如果页面是通过表单 POST 加载的,Request.Form
被填充只有。
在第一个页面加载时,
Request.Form
是一个空集合。由于Request.Form
是一个NameValueCollection
,accessing a non-existent entry returns null .因此,Request.Form["whatever"]
在第一个页面加载时返回null
。回发后,
<Request.Form
中填充了值。由于 HTTP POST 不知道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
。
关于asp.net - Request.Form ["name"] 什么时候为空,什么时候为空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8712238/