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
相关产品推荐
相关产品推荐

