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

标签 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");
}
%>

最佳答案

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

第一个页面加载是 GET,回传是 POST(因此得名 postback)。如果页面是通过表单 POST 加载的,Request.Form 被填充只有

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

关于asp.net - Request.Form ["name"] 什么时候为空,什么时候为空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8712238/

相关文章:

javascript - 使用 jquery 选择一个 Asp.net 控件

html - 响应式设计可在同级宽度增加时缩小 div

asp.net - 关于 WebControl.Style 属性的一些令人困惑的事情

c# - 多线程代理检查器

php - 表被弃用? JavaScript 有库吗?帮我 catch !

c# - 列表框控件中的多列

c# - 图片上传 - 安全问题

c# - 带有 Visual Studio 2012 RC 的 MVC 4/Razor 中的可移植类库?

html - 如何制作一个固定宽度但不固定高度的表格?

html - 使用 CSS 网格的移动 Web 应用程序布局 - 如何使行灵活?