为什么即使文本框是空的,甚至没有触及回发,以下结果也会导致 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)。
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.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<%
}
%>
由于 TextBox.Text 默认为
""
,因此无需在此处检查 null
。
Request.Form
是 NameValueCollection,如果未找到指定的null
,则返回 key
,否则返回值(这是一个空字符串)。
您可以使用
string.IsNullOrEmpty()
方法。
if (!string.IsNullOrEmpty(Request.Form["name"]))
{
Response.Write("<br/>");
Response.Write("Name OK");
}
Request.Form["ControlName"]
返回 null
如果控件不存在于表单中。
如果 Control 存在,但它包含
null
或空值,则 Request.Form["ControlName"]
将始终返回 String.Empty
.
所以这是很好的做法,而不是比较
(Request.Form["ControlName"] != null)
,使用(!String.IsNullOrEmpty(Request.Form["ControlName"]))
基于此站点:https://www.mikesdotnetting.com/article/293/request-form-is-empty-when-posting-to-aspx-page
这就是答案。 备注这一行:
settings.AutoRedirectMode = RedirectMode.Permanent;
在 routeConfig.cs