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

ASP.NET TextBox值无法传递至后端,点击按钮后控件值为空

解决ASP.NET注册表单控件值为空问题

点击「Create Account」按钮后,后端无法获取到txt_Username.Text等控件的用户输入值,相关代码如下:

前端标记

<p class="text-center" style="font-family: 'Playfair Display', serif; font-size: 1.25rem; font-weight: bold;">
    Create an Account
</p>

<div class="mb-3">
    <asp:TextBox ID="txt_Username" CssClass="form-control" PlaceHolder="Username" runat="server"></asp:TextBox>
</div>
<div class="mb-3">
    <asp:TextBox ID="txt_RegEmail" CssClass="form-control" PlaceHolder="Email Address" runat="server"></asp:TextBox>
</div>
<div class="mb-3">
    <asp:TextBox ID="txt_RegPassword" CssClass="form-control" PlaceHolder="Password" runat="server"></asp:TextBox>
</div>
<div class="mb-3">
    <asp:TextBox ID="txt_ConfirmPW" CssClass="form-control" PlaceHolder="Confirm Password" runat="server"></asp:TextBox>
</div>
<div class="mb-3 text-center text-danger">
    <asp:CompareValidator
        ID="CompareValidatorPW"
        runat="server"
        ErrorMessage="Passwords must match!"
        ControlToValidate="txt_ConfirmPW"
        ControlToCompare="txt_RegPassword"
        Operator="Equal"
        Type="String">
    </asp:CompareValidator>
    
</div>
    
<div class="d-grid">
    <asp:Button runat="server" ID="btnRegister" Text="Create Account" CssClass="Greengradiant btn- large" OnClick="btnRegister_Click" UseSubmitBehavior="false"  />
</div>

后端代码

protected void btnRegister_Click(object sender, EventArgs e)
{
    Debug.WriteLine($"Username: {txt_Username.Text}, Email: {txt_RegEmail.Text}, Password: {txt_RegPassword.Text}, Password2: {txt_ConfirmPW.Text}");

    Guid newGUID = Guid.NewGuid();

    SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["Database1"].ConnectionString);
    
    conn.Open();
    
    bool exists = false;
    
    using (SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM [User] WHERE Email = @email", conn))
    {
        //checks if the email that the user has entered exists in the database table
        cmd.Parameters.AddWithValue("Email", txt_RegEmail.Text);
        exists = (int)cmd.ExecuteScalar() > 0;
    }
    
    // if the email exists, send an alert
    if (exists)
    {
        Response.Write("<script>alert('Sorry, Email is already taken!');</script>");
    }
    // else, insert 
    else
    {
        string insertQuery = "INSERT INTO [USER] (User_ID, Username, Email, Password, Role, Created_At) " +
            "values (@id, @username, @email, @password, @role, @timestamp)";
    
        SqlCommand com = new SqlCommand(insertQuery, conn);
        string ePass = Hash.ComputeHash(txt_RegPassword.Text, "SHA512", null);
        com.Parameters.AddWithValue("@password", ePass);
        com.Parameters.AddWithValue("@id", newGUID.ToString());
        com.Parameters.AddWithValue("@email", txt_RegEmail.Text);
        com.Parameters.AddWithValue("@username", txt_Username.Text);
        com.Parameters.AddWithValue("@role", 0);
        com.Parameters.AddWithValue("@timestamp", DateTime.Now);
    
        com.ExecuteNonQuery();
    
        Response.Write("<script>alert('Successfully created account! Welcome! ');</script>");
    }
    
    conn.Close();
    
    txt_Username.Text = "";
    txt_RegEmail.Text = "";
}

解决步骤

  • 确保控件在服务器端表单内:ASP.NET WebForms要求所有runat="server"的控件必须包裹在<form runat="server">标签中,否则无法回传用户输入值。将上述前端代码全部放入<form runat="server">...</form>内。
  • 检查ViewState设置:确认页面指令<%@ Page ... EnableViewState="true" %>未禁用ViewState,且各TextBox控件的EnableViewState属性未设为false。
  • 调整Button的UseSubmitBehavior属性:当前按钮设置了UseSubmitBehavior="false",会通过客户端脚本触发回传,若存在脚本冲突可能导致值丢失。尝试改为UseSubmitBehavior="true",或排查页面中是否有阻止表单提交的自定义脚本。
  • 避免重复控件ID:检查页面中是否存在与txt_Username、txt_RegEmail等重复的控件ID,重复ID会导致回传值异常。
  • 排查Page_Load事件:若Page_Load事件中有重置TextBox值的代码,需将初始化逻辑放在!IsPostBack判断内,防止覆盖用户输入:
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            // 仅首次加载时执行的初始化代码
        }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 11:12:39