You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET WebForm文本框提交后始终为空问题求助

ASP.NET WebForm文本框提交后值为空问题

调试时无法获取文本框输入值,SQL Server存储过程测试正常,但代码返回数据为空,怀疑页面重载导致提交时文本框数据被清空,调整按钮相关代码后仍未解决。

页面标记代码

<%@ Page Title="" Language="C#" MasterPageFile="~/User/Default.Master" AutoEventWireup="true" CodeBehind="Consulation.aspx.cs" Inherits="PetShop.User.Consulation" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    <script>
        window.onload = function () {
            var second = 5;
            setTimeout(function () {
                document.getElementById("<%=lblMsg.ClientID%>").style.display = "none";
            }, second * 1000)
        }
    </script>
    <link href="../CSSandJS/StyleCss/consulation.css" rel="stylesheet" />
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <!-- Slider -->
    <section id="Slider">
        <div class="aspect-ratio-169">
            <img src="../CSSandJS/images/bg_1.jpg" alt="">
            <img src="../CSSandJS/images/bg_2.jpg" alt="">
            <img src="../CSSandJS/images/bg_3.jpg" alt="">
            <img src="../CSSandJS/images/bg_4.jpg" alt="">
        </div>
        <div class="dot-container">
            <div class="dot active"></div>
            <div class="dot"></div>
            <div class="dot"></div>
            <div class="dot"></div>
        </div>
    </section>
    <!-- End Slider -->

    <!-- Free Consulation -->
    <section class="contact">
        <div class="container-contact">
            <h1>Đặt lịch hẹn</h1>
            <div class="row">
                <div class="contact-img">
                    <img src="../CSSandJS/images/bg_1.jpg" alt="" width="400">
                </div>
                <div class="input-infor">
                    <div class="form">
                        <div class="dbl-field">
                            <asp:DropDownList ID="ddlCategory" runat="server" CssClass="form-control option field-mail listOp" DataSourceID="SqlDataSource1" DataTextField="TENDV" DataValueField="MADV" AppendDataBoundItems="true">
                                <asp:ListItem Value="0">Chọn danh mục</asp:ListItem>
                            </asp:DropDownList>
                            <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:cs %>" SelectCommand="SELECT [MADV], [TENDV] FROM [DICHVU]"></asp:SqlDataSource>
                        </div>
                        <div class="dbl-field">
                            <div class="field-mail">
                                <asp:TextBox ID="txtEmail" runat="server" CssClass="form-control input" placeholder="Nhập email" required></asp:TextBox>
                                <i class="ri-mail-line"></i>
                            </div>
                        </div>
                        <div class="dbl-field">
                            <div class="field">
                                <asp:TextBox ID="txtNameAcc" runat="server" CssClass="form-control input" placeholder="Nhập tên"></asp:TextBox>
                                <i class="ri-user-line"></i>
                            </div>
                            <div class="field">
                                <asp:TextBox ID="txtSDT" runat="server" CssClass="form-control input" placeholder="Nhập số điện thoại" MaxLength="11"></asp:TextBox>
                                <i class="ri-phone-line"></i>
                            </div>
                        </div>
                        <div class="dbl-field">
                            <div class="field">
                                <asp:TextBox ID="txtNgay" runat="server" CssClass="form-control input" TextMode="Date"></asp:TextBox>
                                <i class="ri-calendar-2-line"></i>
                            </div>
                            <div class="field">
                                <asp:TextBox ID="txtTime" runat="server" CssClass="form-control input" placeholder="Nhập giờ hẹn" MaxLength="5" TextMode="SingleLine"></asp:TextBox>
                                <i class="ri-time-line"></i>
                            </div>
                        </div>
                        <div class="message">
                            <asp:TextBox ID="txtDescription" runat="server" CssClass="form-control textarea" placeholder="Tin nhắn" TextMode="MultiLine"></asp:TextBox>
                            <i class="ri-message-2-line"></i>
                        </div>
                        <div class="button-area">
                            <asp:Button ID="Add" runat="server" Text="Gửi lịch hẹn" class="btn btn-primary button" OnClick="Add_Click"/>
                            <asp:Label ID="lblMsg" runat="server" Visible="false"></asp:Label>
                            <%--<asp:linkbutton id="submitcal" runat="server" cssclass="btn btn-primary button" OnClick="Add_Click">gửi lịch hẹn</asp:linkbutton>--%>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </section>
    <!-- End Free Consulation -->
</asp:Content>

后台C#代码

namespace PetShop.User
{
    public partial class Consulation : System.Web.UI.Page
    {
        SqlConnection con;
        SqlCommand cmd;
        protected void Page_Load(object sender, EventArgs e)
        {

        }

        private void clear()
        {
            txtEmail.Text = string.Empty;
            txtDescription.Text = string.Empty;
            txtNameAcc.Text = string.Empty;
            txtSDT.Text = string.Empty;
            txtNgay.Text = string.Empty;
            txtTime.Text = string.Empty;
            ddlCategory.ClearSelection();
        }

        protected void Add_Click(object sender, EventArgs e)
        {
            string actionName = string.Empty;
            bool isValidToExcute = true;

            con = new SqlConnection(Connection.GetConnectionString());
            cmd = new SqlCommand("Add_KHaddLH", con);
            cmd.Parameters.AddWithValue("@Action", "INSERT4KH");
            cmd.Parameters.AddWithValue("@MaDv", ddlCategory.SelectedValue);
            cmd.Parameters.AddWithValue("@EMail", txtEmail.Text.Trim());
            cmd.Parameters.AddWithValue("@Ten", txtNameAcc.Text.Trim());
            cmd.Parameters.AddWithValue("@Sdt", txtSDT.Text.Trim());
            cmd.Parameters.AddWithValue("@NgayHen", txtNgay.Text.ToString());
            cmd.Parameters.AddWithValue("@GioHen", txtTime.Text.Trim());
            cmd.Parameters.AddWithValue("@GhiC", txtDescription.Text.Trim());

            if (isValidToExcute)
            {
                cmd.CommandType = CommandType.StoredProcedure;
                try
                {
                    con.Open();
                    cmd.ExecuteNonQuery();
                    actionName = "gửi";
                    lblMsg.Visible = true;
                    lblMsg.Text = "Lịch hẹn " + actionName + " thành công!";
                    lblMsg.CssClass = "alert alert-success";
                    clear();
                }
                catch (Exception ex)
                {
                    lblMsg.Visible = true;
                    lblMsg.Text = "Lỗi!!!" + ex.Message;
                    lblMsg.CssClass = "alert alert-danger";
                }
                finally
                {
                    con.Close();
                }
            }
        }
    }
}

问题排查与解决方案

1. 确保ViewState启用

检查页面指令中ViewStateMode是否为Enabled,默认启用但需确认:

<%@ Page ... ViewStateMode="Enabled" %>

同时检查单个控件的ViewStateMode属性未被设置为Disabled。

2. 验证回发时控件值是否保留

在Add_Click方法开头加断点,查看txtEmail.Text、txtNameAcc.Text等属性的实际值:

  • 若值为空,说明ViewState未正确恢复,需检查页面是否有自定义回发逻辑重置控件。
  • 若值存在但存储过程无数据,需核对存储过程参数与代码参数的匹配度(包括名称、数据类型)。

3. 检查存储过程参数匹配

确认存储过程Add_KHaddLH的参数:

  • 参数名称是否与代码中AddWithValue的参数完全一致(SQL Server默认不区分大小写,但需避免拼写错误)。
  • @NgayHen的数据类型是否与txtNgay.Text的格式匹配(比如存储过程为DATE类型,需确保文本框输入为标准日期格式)。

4. 规范页面初始化逻辑

如果后续在Page_Load中添加控件数据绑定代码,必须用!IsPostBack包裹,避免回发时重置控件值:

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {
        // 控件初始化、数据绑定逻辑写在这里
    }
}

5. 排查客户端脚本干扰

检查是否有其他客户端脚本(如表单重置、值清空代码)影响文本框值,当前页面的window.onload脚本仅操作提示标签,无影响。


内容的提问来源于stack exchange,提问作者PanPan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 18:40:32