Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在ASP.net MVC中使用jQuery替换复杂类型子集合的所有id属性_Jquery_Asp.net Mvc - Fatal编程技术网

如何在ASP.net MVC中使用jQuery替换复杂类型子集合的所有id属性

如何在ASP.net MVC中使用jQuery替换复杂类型子集合的所有id属性,jquery,asp.net-mvc,Jquery,Asp.net Mvc,我的情况如下: 我正在编写一个ASP.net MVC 1网站,我有一个创建/编辑表单,它使用默认模型绑定将表单解析为强类型复杂对象 我发布的对象有另一个复杂类型的子集合,我为模型绑定器设置id格式的方式如下: <div class="childContainer" > <!-- There's one of these for each property for each child collection item --> <%= Html.TextBo

我的情况如下:

我正在编写一个ASP.net MVC 1网站,我有一个创建/编辑表单,它使用默认模型绑定将表单解析为强类型复杂对象

我发布的对象有另一个复杂类型的子集合,我为模型绑定器设置id格式的方式如下:

<div class="childContainer" >
   <!-- There's one of these for each property for each child collection item -->
   <%= Html.TextBox("ChildCollectionName[0].ChildPropertyName", /* blah blah */ ) %>
   <%= Html.TextBox("ChildCollectionName[0].OtherChildPropertyName", /* blah blah */ ) %>
   <!-- ... -->
</div>

这将被渲染为

<div class="childContainer" >
    <input id="ChildCollectionName[0]_ChildPropertyName" ... />
    <input id="ChildCollectionName[0]_OtherChildPropertyName" ... />
...
</div>
<div class="childContainer" >
    <input id="ChildCollectionName[1]_ChildPropertyName" ... />
    <input id="ChildCollectionName[1]_OtherChildPropertyName" ... />
...
</div>

...
...
对于chlid集合中的每个条目

此集合是使用jQuery在表单中动态创建的,因此可以添加、删除条目等。每当集合上有操作时,我都需要更新索引,以便在服务器端正确绑定它

当我更新子系统中的索引时,替换所有html输入id的最佳方法是什么,例如

替换所有[*]-->[N],其中N是正确的索引

使用jQuery/JavaScript

我现在有一些代码,但它有问题,我认为有一个更简单的解决方案

此外,如果你有一个更简单的方法来确定儿童收藏,我也会接受任何建议


塔克斯

不必在每次集合更改时操作DOM元素,您可以在JavaScript变量中保留一个元素数组,并在需要添加/删除元素时直接使用该数组。然后使用数组重新渲染输入元素。

我在视图中使用模型对象的动态列表时做了类似的事情。我在表单中使用了表结构,但我相信您可以应用类似的逻辑

我使用了添加/删除表行的按钮。提交表单时,您必须保持数字顺序,因此id应为0,1,2,3,不能为0,2,3,4等。我的设计更简单,您只能在列表底部添加一项,而只能删除列表中的最后一项。因此,我可以保持身份证的秩序

在操作动态表单时,您可能会发现一些代码很有用

$('.add').live('click', function()
{
    var addRowId = $('#myTable tr').length;
    var internalId = addRowId - 1; //subtract -1 for header row

    //clone the last row
    var row = $('#ft tr:last').clone(false);

    //modify the input id and name values
    row.find(':input')
        .attr('id', function() { return 
            $(this).attr('id').replace(/\[[\d+]\]/g, '[' + internalId + ']');
        })
        .attr('name', function() { return 
            $(this).attr('name').replace(/\[[\d+]\]/g, '[' + internalId + ']');
        });

    //add the new row
    $('#ft tr:last').after(row);

    return false;
});
注意:我在升级到MVC 2时发现一个变化,id的生成发生了变化


通常css类名没有前导点。我甚至不确定这是合法有效的语法。而且,你还没有足够清楚地解释你想做什么。你说的是id(“我格式化id的方式如下…”)。但我没有看到任何身份证。您是指HTML文档中元素上的ID吗?我没有看到。也许你可以用更简单、更清楚的术语重申这个问题。你应该提供调用HTML.TextBox生成的完整HTML输出,假设它包含你想要捕获的DOM ID(同时假设此代码是迭代的)。@Chesso css名称在我的例子中是一个输入错误(不是复制粘贴的)我添加了一个简化版的html输出,我无法发布实际代码(专有),但这应该可以更好地了解我正在尝试做什么…感谢您提供有关v2更改的提示,您的解决方案包括一些我不知道的选择器,它们将非常有用。我实际上也在使用一个表结构,但为了简单起见,在问题中省略了它。另一个区别是,我允许删除任何项目,但这仍然是非常适用和有益的。在遍历表时,有没有跳过表头行的好方法?现在我只是在使用if($(this.find(“th”).length==0)之类的东西。。。这是一个“tr”,不知道是否有更好的方法。。。谢谢您可以通过使用和来区分这一点,并在javascript中使用$(“#mytable tbody tr”)。长度应该有效。