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

ASP.NET注册表单求助:验证提示时机设置及SQL语法错误排查

解决ASP.NET注册表单的两个问题

我来帮你搞定这两个问题,咱们逐个分析解决:


问题1:仅在点击按钮后显示验证提示(初始加载不显示)

你当前页面上的验证提示是用静态<span>标签写死的,所以页面一加载就会显示出来。要实现仅在提交且输入有误时才显示提示,需要用ASP.NET自带的验证控件来替代静态文本,同时调整验证控件的显示设置:

具体步骤:

  1. 替换静态提示为RequiredFieldValidator控件:
    把每个字段旁的静态<span class="auto-style8">...</span>换成RequiredFieldValidator,这个控件会在用户未输入内容(或未选择有效选项)时,仅在提交后显示错误提示。
    比如Title字段的修改:

    <!-- 原来的静态提示 -->
    <span class="auto-style8">Enter a title.</span>
    <!-- 替换为以下验证控件 -->
    <asp:RequiredFieldValidator ID="ReqTitle" runat="server" 
        ControlToValidate="TxtTitle" 
        ErrorMessage="Enter a title." 
        ForeColor="Red" 
        Display="Dynamic">
    </asp:RequiredFieldValidator>
    

    对Name、ID、Email、Mobile字段做同样的替换,Major字段需要额外设置InitialValue,确保用户不能选择默认的"Select Option":

    <asp:RequiredFieldValidator ID="ReqMajor" runat="server" 
        ControlToValidate="LstMajor" 
        ErrorMessage="Choose major." 
        ForeColor="Red" 
        Display="Dynamic"
        InitialValue="Select Option">
    </asp:RequiredFieldValidator>
    
  2. 调整现有正则验证控件的显示方式:
    把已有的RegularExpressionValidator的Display属性设为Dynamic,这样初始加载时不会占用空间,仅验证失败时显示;同时修正你的正则表达式语法错误(把\d(9)改成\d{9},表示匹配9位数字,手机号的\d(10)同理改成\d{10}):

    <asp:RegularExpressionValidator ID="RegularExpressionValidator3" runat="server"
        ErrorMessage="Invalid ID" 
        ControlToValidate="TxtID" 
        ForeColor="Red" 
        ValidationExpression="\d{9}"
        Display="Dynamic">
    </asp:RegularExpressionValidator>
    

问题2:SqlException: Incorrect syntax near 'has' 的原因及解决

这个错误的核心原因非常明显:你把成功提示文本当成了SQL语句执行!

错误分析:

后端代码里这行完全错误:

cmd.CommandText = "Your request has been submitted successfully";

ExecuteNonQuery()方法会把这个字符串当成SQL命令发送给数据库,但这根本不是有效的SQL语句,数据库自然会报语法错误。

解决方案:

  1. 编写正确的INSERT SQL语句:
    你需要把表单数据插入到数据库的对应表中(假设你的表名为Registrations,字段和你的参数对应,记得替换成你实际的表名和字段名):

    cmd.CommandText = "INSERT INTO Registrations (Title, Name, ID, Email, Mobile, Major, Note) " +
                      "VALUES (@TTitle, @TName, @TID, @TEmail, @TMobile, @LMajor, @TNote)";
    
  2. 修复代码中的其他小错误:

    • 你的LstMajor参数行多了多余的分号和括号,要修正:
      // 原来的错误代码
      cmd.Parameters.AddWithValue("@LMajor", LstMajor.SelectedItem.ToString()););
      // 修正后
      cmd.Parameters.AddWithValue("@LMajor", LstMajor.SelectedItem.Text);
      
    • 用using语句管理数据库连接,避免连接泄漏:
      protected void Button1_Click(object sender, EventArgs e)
      {
          // 使用using自动释放连接
          using (SqlConnection con = new SqlConnection(@"Data Source=DESKTOP-20J5J59; Integrated Security=True"))
          {
              con.Open();
              SqlCommand cmd = con.CreateCommand();
              cmd.Parameters.AddWithValue("@TTitle", TxtTitle.Text);
              cmd.Parameters.AddWithValue("@TName", TxtName.Text);
              cmd.Parameters.AddWithValue("@TID", TxtID.Text);
              cmd.Parameters.AddWithValue("@TEmail", TxtEmail.Text);
              cmd.Parameters.AddWithValue("@TMobile", TxtMobile.Text);
              cmd.Parameters.AddWithValue("@LMajor", LstMajor.SelectedItem.Text);
              cmd.Parameters.AddWithValue("@TNote", TxtNote.Text);
              // 正确的INSERT语句
              cmd.CommandText = "INSERT INTO Registrations (Title, Name, ID, Email, Mobile, Major, Note) VALUES (@TTitle, @TName, @TID, @TEmail, @TMobile, @LMajor, @TNote)";
              cmd.ExecuteNonQuery();
              // 插入成功后显示提示
              Response.Write("<script>alert('Your request has been submitted successfully');</script>");
          }
      }
      
    • 修复按钮的OnClientClick语法错误(缺少引号),更合理的是去掉这个点击时的提示,改为插入成功后再提示:
      <asp:Button ID="Button1" runat="server" Text="Register" Font-Size="Medium" 
          Height="36px" Width="110px" 
          OnClick="Button1_Click" />
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 11:17:33