用MVC中视图的输入值替换脚本中的数组值

Replacing an array values in script with input values of view in MVC

我有这个视图代码(模型的值):

@foreach (var item in Model)
{
  <input name="DepID" type="text" value="@item.DepID" id="id">
  <input name="DepName" type="text"  value="@item.DepName" id="depname">
  <input name="DepID_Parent" type="text"  value="@item.DepID_Parent" 
id="parent">
}

另一方面,我的脚本中有一个如下所示的数组:

var testData = [
 { id: 1, name: 'my organization', parent: 0 },
 { id: 2, name: 'ceo office', parent: 1 },
 { id: 3, name: 'division 1', parent: 1 },
 { id: 4, name: 'division 2', parent: 1 },
 { id: 6, name: 'division 3', parent: 1 },
 { id: 7, name: 'division 4', parent: 1 },
 { id: 8, name: 'division 5', parent: 1 },
 { id: 5, name: 'sub division', parent: 3 },
];

我想替换所有输入到 testData 数组的值,并在我的脚本中使用它们。

所以,我用这段脚本代码更改了 testData 的定义:

var testData = $('#id,#depname,#parent').map(function () {
            return testData.value;
        }).get(); 

但是当我用这段代码替换 testData 时,没有返回值。

必须进行哪些更改?

您的代码有一些问题。您正在为循环内的输入元素设置静态 id 属性值。因此,当 razor 执行您的代码时,它会为具有相同 id 属性值的多个输入生成标记。即无效HTML!元素 ID 在文档中应该是唯一的

根据您添加到问题的评论,您想通过读取 DOM 中的输入值来创建一个类似于 testData 变量中的数组 javascript .我建议您将集合中每个项目的输入包装在包装器 div 中。稍后您可以在此包装器 div 上使用 jQuery 选择器来获取构建数组的项目。确保删除在循环中设置相同 id 属性值的代码

@foreach (var item in Model)
{
    <div class="item-row">
        <input name="DepID" type="text" value="@item.DepID" />
        <input name="DepName" type="text"  value="@item.DepName" />
        <input name="DepID_Parent" type="text"  value="@item.DepID_Parent" />
    </div>
}

现在在您的 javascript 中,使用 item-row class 获取所有 div,并获取输入(使用 name 选择器)和使用 3 个属性构建对象。

这应该有效

var testData = $("div.item-row").map(function () {
    var t = $(this);

    return {
        id: t.find("[name='DepID']").val(),
        name: t.find("[name='DepName']").val(),
        parent: t.find("[name='DepID_Parent']").val()
    };
}).get();
//testData is an array of js objects with 3 properties
console.log(testData);