gpt4 book ai didi

c# - JQuery MVC 集合名称属性

转载 作者:太空狗 更新时间:2023-10-30 00:32:38 26 4
gpt4 key购买 nike

我有一张表,我已经动态添加/删除了其中的行。该表包含将作为集合回发到 MVC 的字段。在这种情况下,使用 jquery 更新表意味着我要处理包含不完整集合的集合,例如 ...

function add() {
$.ajax({
url: "GetRow",
type: 'post',
dataType: 'html',
timeout: 30000,
data: {
RowIndex: otherRows.length,
"Item.Property1": $("option:selected", dropDown).text(),
"Item.Property2": $("option:selected", dropDown).val()
},
success: function (result) {
var newRow = $(result);
tableBody.append(newRow);
}
});
}

此函数进行 ajax 调用以获取 mvc 操作结果,该结果返回给定索引处的行的结果,并另外从我的页面上的下拉菜单中设置一些默认值。

现在假设我有一个名为“删除”的类似函数,其中使用 jquery 删除一行,此时表格有 3 行(当然忽略标题行),我要删除的行是中间一行。

这意味着我的行中的字段最终看起来像这样......

//Row 1:
<input type="text" name="SomeCollection[0].Property1" />

//Row 2:
Nothing, deleted of course

//Row 3:
<input type="text" name="SomeCollection[2].Property1" />

因此,如果我现在执行回发,由于 id 范围不一致,MVC 模型绑定(bind)器将仅为我绑定(bind)项目 1,而项目 2(实际上是客户端删除之前的项目 3)未映射。

我的想法是我希望我的服务器逻辑做一个非常简单的“如果我收藏中的项目的 id 不在发布数据中,将其从数据库中删除”,这样所有的收藏操作都可以完全客户端在这个非常繁重的页面上节省了不断的回发。

所以我开始在 jquery 中组合一个函数来解决这个问题......

function updateNames(table) {
var rows = $("tr", table);
var index = 0;

rows.each(function () {
var inputFields = $("input");

inputFields.each(function (){
//replace name="bla[<any number>].Anything" with
// name="bla[" + index + "].Anything"
});

index++;
});
}

所以我的问题是......我如何对 jquery 说“将 name 属性中的 [] 替换为 [index]”?

我知道这不会解决嵌套集合/其他此类复杂场景的问题,但是一旦我解决了这个功能,我以后总是可以扩展它,而且我的要求还没有涉及到。

编辑:

关于我当前思维模式的一些额外细节……好还是坏?

如果我获取 name 属性值并“遍历字符”直到找到第一个“[”和下一个“]”然后替换中间的所有内容,它应该可以解决我的问题,但 IE 上的这种类型可能慢如 hell 。

有人得到了“只需调用这个聪明的函数”类型的答案吗? (如果有的话)。

编辑 2:

哇,我真的要更努力地看...我现在感觉自己真是个笨蛋,有两个原因(不看,正则表达式是一个明显的解决方案)

JQuery: how to replace all between certain characters?

如果我能找出正确的正则表达式,我就有了解决方案(也许这是我应该问的问题,因为我一直对正则表达式的疯狂感到恼火)。

但是不能低估正则表达式的力量:)

最佳答案

这应该适合你:

function updateNames(table) {

var rows = $("tr", table);
var index = 0;

rows.each(function () {
var inputFields = $(this).find("input");
inputFields.each(function (){
var currentName = $(this).attr("name");
$(this).attr("name", currentName.replace(/\[(.*?)\]/, '['+index+']'));

});
index++;
});
}

如果每一行内有多个输入,而您只想更新一个,那么请考虑使用“开头为”jQuery 选择器:http://api.jquery.com/attribute-starts-with-selector/ .

关于c# - JQuery MVC 集合名称属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16375020/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com