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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 01:54:04