如何将模态框TextBox输入的数据插入数据库并解决按钮点击页面刷新问题
问题根因和修复方案
0. 表单缺少服务器标识
你页面里的<form>标签没有加runat="server"属性,ASP.NET所有服务器控件(包括asp:TextBox、asp:Button)的事件要正常触发,必须放在带runat="server"的表单内部。
- 修复方案:修改form标签为:
<form method="post" enctype="multipart/form-data" runat="server">
1. 服务器按钮未触发回发
你的<asp:Button>手动加了type="button"属性,这会覆盖ASP.NET默认生成的type="submit",导致点击按钮不会触发表单提交,后台的Message_button_Click事件根本不会执行,这是最核心的原因。
- 修复方案:删掉Button上的
type="button"属性即可。
修复后的按钮代码:
<asp:Button ID="Message_button" runat="server" Text="Send" OnClick="Message_button_Click" />
2. try/catch逻辑完全错误
你把数据库连接、执行SQL的代码全放在了try块外面,只要数据库操作报错(比如连接字符串为空、SQL语法错误),代码直接抛出异常终止执行,根本不会走到你写的catch块里,自然也就没有alert提示。
- 修复方案:把所有数据库操作逻辑移到try块内部,finally块里要关闭数据库连接,避免连接泄漏。
3. 存在严重SQL注入风险
你直接把用户输入的文本拼到SQL语句里,用户只要输入特殊字符就能篡改你的SQL逻辑,甚至删库。必须用参数化查询替换字符串拼接。
4. 连接字符串未配置
你现在的SqlConnection构造函数里的Data Source、User ID、Password全是空的,肯定连不上数据库,要改成你自己的数据库连接信息,建议统一放到web.config里管理,不要硬编码。
5. 回发后模态框状态丢失
ASP.NET Web Forms默认是同步回发,页面刷新后你之前加的show类就会被重置,模态框会自动关闭,需要在返回的脚本里手动控制模态框的显示状态。
修复后的C#后台代码
// 替换成你自己的数据库连接信息 private readonly string conStr = @"Data Source=你的数据库地址;Initial Catalog=Contacts;Persist Security Info=True;User ID=你的数据库账号;Password=你的数据库密码"; protected void Message_button_Click(object sender, EventArgs e) { string script = string.Empty; try { // 所有数据库操作放入try块,using会自动释放连接 using (SqlConnection con = new SqlConnection(conStr)) { con.Open(); SqlCommand cmd = con.CreateCommand(); // 括号内替换为你ContactsTable表对应的字段名,不要省略字段列表 cmd.CommandText = "INSERT INTO ContactsTable (email, content) VALUES (@Email, @Message)"; cmd.Parameters.AddWithValue("@Email", email_textbox.Text.Trim()); cmd.Parameters.AddWithValue("@Message", email_message.Text.Trim()); cmd.ExecuteNonQuery(); } // 成功提示+关闭模态框 script = "alert('提交成功');document.getElementById('popup').classList.remove('show');"; } catch (Exception ex) { // 失败提示+保持模态框显示,上线前可删掉ex.Message避免暴露敏感信息 script = $"alert('提交失败:{ex.Message}');document.getElementById('popup').classList.add('show');"; } finally { email_textbox.Text = ""; email_message.Text = ""; } ClientScript.RegisterStartupScript(this.GetType(), "submitTip", script, true); }
如果不需要页面刷新,可以把整个模态框放到UpdatePanel控件中,实现无刷新提交,体验会更好。
内容的提问来源于stack exchange,提问作者BojanSerafimovski
相关产品推荐
相关产品推荐

