什么时候 Request.Form["name"] 为空,什么时候为空字符串?

问题描述 投票:0回答:4

为什么即使文本框是空的,甚至没有触及回发,以下结果也会导致 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");
}
%>
asp.net html webforms
4个回答
10
投票

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

第一个页面加载是 GET,回传是 POST(因此得名 postback)。

Request.Form
被填充only 如果页面是通过表单 POST 加载的。

  • 在第一页加载时,

    Request.Form
    是一个空集合。由于
    Request.Form
    是一个
    NameValueCollection
    访问一个不存在的条目返回null。因此,
    Request.Form["whatever"]
    在第一页加载时返回
    null

  • 回发后,

    Request.Form
    充满了值。由于 HTTP POST 不知道
    null
    值,因此
    Request.Form["whatever"]
    为存在但为空的字段返回空字符串。

如果你想避免

x != null && x != ""
模式,使用 String.IsNullOrEmptynull 合并运算符
(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


2
投票

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

您可以使用

string.IsNullOrEmpty()
方法。

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

2
投票

Request.Form["ControlName"]
返回
null
如果控件不存在于表单中。

如果 Control 存在,但它包含

null
或空值,则
Request.Form["ControlName"]
将始终返回
String.Empty
.

所以这是很好的做法,而不是比较

(Request.Form["ControlName"] != null)
,使用
(!String.IsNullOrEmpty(Request.Form["ControlName"]))


0
投票

基于此站点:https://www.mikesdotnetting.com/article/293/request-form-is-empty-when-posting-to-aspx-page

这就是答案。 备注这一行:

settings.AutoRedirectMode = RedirectMode.Permanent;

在 routeConfig.cs

© www.soinside.com 2019 - 2024. All rights reserved.