JS修改带runat=server的div内容后C#后端读取为空如何解决
问题根本原因
ASP.NET WebForms 的回发机制仅会同步表单输入类元素的修改后的值到服务端,div 不属于表单提交字段,你前端通过JS修改它的innerText后,改动仅保存在浏览器本地,不会在页面回发时传递给服务端。服务端读取到的InnerText永远是页面首次渲染时的初始值,因此你拿到的是空字符串。
可行解决方案
方案1:替换为隐藏表单域(推荐,改动最小)
直接把你当前的div替换为隐藏表单元素,支持回发传值:
<!-- 用ASP.NET自带隐藏域控件 --> <asp:HiddenField ID="riddleIdHere" runat="server" /> <!-- 也可以用原生隐藏input加runat属性 --> <input type="hidden" id="riddleIdHere" runat="server" />
前端JS赋值逻辑对应修改为修改元素的value属性:
document.getElementById("riddleIdHere").value = riddleid;
后端直接读取Value属性即可拿到数值:
// 强烈建议把原有的SQL拼接改为参数化查询,避免SQL注入风险 sql = "UPDATE YHRiddles SET rateSum += @rateSum WHERE id = @riddleId;"; // 取值代码 string riddleId = riddleIdHere.Value;
方案2:保留div的情况下新增隐藏域同步值
如果业务需要必须保留div元素,只需在JS给div赋值的同时,同步给一个额外的隐藏表单域赋值,后端读取隐藏域的内容即可。
注意事项
- 原有的SQL字符串拼接写法存在严重的SQL注入漏洞,必须替换为参数化查询,禁止直接把前端传入的内容拼接到SQL语句中。
- 确保JS赋值逻辑的执行时机早于页面回发触发时机,避免还没赋值就提交了请求。
内容的提问来源于stack exchange,提问作者hpr
相关产品推荐
相关产品推荐

