Request.Form [“name”]何时为空,何时为空字符串?

时间:2012-01-03 12:23:07

标签: asp.net html 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");
}
%>

文本框实际上是否在回发中包含空字符串(“”)?


为什么以下结果会导致第一页上的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");
}
%>

3 个答案:

答案 0 :(得分:10)

首先,让我回答你的问题:

第一页加载是GET,回发是POST(因此名称 post 返回)。如果通过表单POST加载页面,则Request.Form仅填充

  • 在第一页加载时,Request.Form是一个空集合。由于Request.FormNameValueCollectionaccessing 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

答案 1 :(得分:2)

Request.FormNameValueCollection,如果找不到指定的null则返回key,否则返回值(这是一个空字符串)。

您可以使用string.IsNullOrEmpty()方法。

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

答案 2 :(得分:2)

如果表单中没有Control,则

Request.Form["ControlName"]会返回null

如果控件存在但包含null或空值,则Request.Form["ControlName"]将始终返回String.Empty

这是一个好习惯,而不是比较(Request.Form["ControlName"] != null),请使用(!String.IsNullOrEmpty(Request.Form["ControlName"]))