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

Asp.Net Razor页面JavaScript无法更新@Html.TextBox控件问题

问题分析与解决方案

让我帮你拆解下这个文本框无法更新的问题——大概率是你在赋值时误用了JSON.stringify(),咱们一步步来看:

1. 核心问题:多余的JSON.stringify()调用

你在Ajax成功回调里的赋值代码是这样的:

$('#PIP_DEPT').val(JSON.stringify(result));

这里的JSON.stringify()完全是画蛇添足,会导致两种不符合预期的情况:

  • 如果你的API返回的直接是部门名称的字符串(比如"软件开发部"),JSON.stringify()会给这个字符串套一层双引号,变成"\"软件开发部\"",文本框里会显示带引号的内容,看起来像是没更新正确;
  • 如果API返回的是包含部门信息的对象(比如{ Department: "软件开发部" }),JSON.stringify()会把整个对象转成JSON格式的字符串(比如"{\"Department\":\"软件开发部\"}"),这显然不是你想要的纯部门名称。

修复方法:
去掉JSON.stringify(),直接使用result或者它的对应属性:

// 情况1:result直接是部门字符串
$('#PIP_DEPT').val(result);

// 情况2:result是对象,取对应属性(替换成API返回的实际属性名)
$('#PIP_DEPT').val(result.Department);

2. 调试alert的小问题

你用来验证结果的alert代码也有瑕疵:

alert(JSON.stringify('result = ' + result));

如果result是对象,'result = ' + result会被转换成"result = [object Object]",再套上JSON.stringify()根本看不到result的真实结构。改成下面的写法才能看到返回数据的真面目:

alert('result = ' + JSON.stringify(result));

3. Ajax请求格式的潜在优化

你的Ajax设置了contentType: "application/json; charset=utf-8",但data传的是普通对象:

data: { 'badge': badge },

jQuery在这种情况下不会自动把对象转换成JSON字符串,而是会用application/x-www-form-urlencoded格式发送,可能导致API解析参数异常。建议把data改成JSON字符串:

data: JSON.stringify({ 'badge': badge }),

关于readonly属性的说明

你设置了文本框的@readonly = true,但这个属性只是禁止用户手动输入,完全不会阻止JavaScript修改它的value值——你之前的UpdateBadge函数能正常更新只读文本框也证明了这一点,所以这不是问题所在。


内容的提问来源于stack exchange,提问作者Phil N DeBlanc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:52:06