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

如何在ASP.NET MVC视图的JavaScript中更新List<string>模型?

解决ASP.NET MVC中通过JavaScript修改List隐藏字段的问题

我来帮你搞定这个问题!你遇到的核心问题是@Html.HiddenFor生成的input元素ID格式和你预想的不一样,导致JavaScript选择器找不到目标元素,自然没法修改值。

为什么原来的选择器无效?

当你用@Html.HiddenFor(model => Model._ActivityAccessLevel[i])生成隐藏字段时,ASP.NET MVC会自动生成符合模型绑定规则的ID和Name属性。比如索引i=0的元素,生成的HTML是这样的:

<input id="_ActivityAccessLevel_0" name="_ActivityAccessLevel[0]" type="hidden" value="原有的字符串值">

你原来用$("#_ActivityAccessLevel[" + currentID + "]")这种选择器,是在找ID为_ActivityAccessLevel[0]的元素,但实际生成的ID是_ActivityAccessLevel_0,自然匹配不到元素啦。

正确的解决方法

方法1:使用正确的ID选择器

直接按照MVC生成的ID格式构造选择器,ID的规则是_ActivityAccessLevel_{索引数字},对应的JavaScript代码如下:

// 假设currentID是你要修改的目标索引(比如0到99之间的数值)
const currentID = 3;
// 构造正确的选择器并获取元素
const targetInput = $("#_ActivityAccessLevel_" + currentID);
// 修改隐藏字段的值
targetInput.val("你想要设置的新字符串内容");

方法2:通过Name属性选择元素

如果觉得ID格式不好记,也可以通过Name属性来定位元素——Name属性的格式和你最初预想的_ActivityAccessLevel[索引]是一致的:

const currentID = 3;
// 通过name属性匹配元素
const targetInput = $('input[name="_ActivityAccessLevel[' + currentID + ']"]');
// 更新值
targetInput.val("你的新字符串值");

额外的实用提醒

  1. 确保你的Model._ActivityAccessLevel列表长度至少有100个元素,否则循环for (int i = 0; i < 100; i++)会抛出索引越界异常。如果列表长度不确定,建议改成遍历列表的实际元素:
@for (int i = 0; i < Model._ActivityAccessLevel.Count; i++)
{
    @Html.HiddenFor(model => model._ActivityAccessLevel[i])
}
  1. 调试时可以按F12打开浏览器开发者工具,查看页面中生成的隐藏字段HTML,确认ID和Name属性是否符合预期,这样能更快定位问题。

内容的提问来源于stack exchange,提问作者MIDI

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:25:29