ASP.NET后端无法获取jQuery设置的runat="server"输入框值
问题根因
- 服务端控件客户端ID不固定:带
runat="server"属性的输入控件未设置ClientIDMode="Static"时,嵌套在母版页、内容页等场景下,渲染到前端的实际ID会自动追加父容器前缀,你当前使用的$('#body_num1')选择器可能无法匹配到实际的输入控件,导致赋值失败,服务端自然取不到值。 - 只读控件回发值被忽略:ASP.NET Web Forms出于安全校验逻辑,默认会忽略
readonly属性的服务端输入控件的客户端修改值,回发时直接读取ViewState中存储的初始值,就算前端赋值成功,服务端也拿不到最新值。 - JIT内部错误多为编译缓存异常:该错误和取值逻辑本身无直接关联,一般是项目编译缓存损坏、调试上下文异常导致的内部编译错误。
修复方案
1. 调整前端input控件属性
给runat="server"的input添加两个属性:ClientIDMode="Static"固定客户端ID,EnableViewState="false"强制服务端读取回发的实际值:
<input type="text" id="num1" readonly runat="server" ClientIDMode="Static" EnableViewState="false"/>
2. 修正jQuery滑块赋值逻辑
因为已经固定了客户端ID为num1,调整选择器,同时注意单滑块场景下取值用ui.value而非多滑块的ui.values[0]:
var num = $('#num1') $('#slider').slider({ min:0, max:100, slide: function(event, ui){ num.val(ui.value); } });
3. 服务端取值逻辑无需修改
原有服务端代码可以直接正常读取到最新值:
Protected Sub btn_doSomething_ServerClick(sender As Object, e As EventArgs) Dim num1_input As String = num1.Value System.Diagnostics.Debug.WriteLine(num1_input) End Sub
4. 处理JIT编译错误
如果修改后仍报错,执行以下操作清理缓存:
- 在Visual Studio中右键解决方案,选择「清理解决方案」
- 关闭Visual Studio,删除项目根目录下的
.vs隐藏文件夹、bin文件夹、obj文件夹 - 重新打开项目执行编译即可
内容的提问来源于stack exchange,提问作者the_noob
相关产品推荐
相关产品推荐

