JavaScript Asp.net 重复控件

3
我正在尝试使用Asp.net 3.5 / IIS创建一个具有顶级可重复表单的Web表单。因此,基本上是订单->产品->产品部件的情况。订单只有一个,产品可重复。每个产品都有可重复的产品零件。由于产品和产品部分有许多字段,因此我无法使用网格。因此,我为产品添加/删除按钮,在每个产品中添加/删除每个产品部分的按钮。这是我的要求。经过一些研究,我已能够实现添加/删除操作,使用了jquery/js。但是,如何在服务器上捕获此数据?由于JavaScript正在添加和删除这些控件,它们不是服务器端的,我不知道如何正确地分配名称属性。我正在尝试以下JavaScript代码,但它不起作用:
function onAddProperty(btnObject){
var previous = btnObject.prev('div');
var propertyCount = jquery.data(document.body, 'propertyCount');

var newDiv = previous.clone(true).find("*[name]").andSelf().each(function () { $(this).attr("name").replace(($(this).attr("name").match(/\[[0-9]+\]/), cntr)); }); ;

propertyCount++;
jquery.data(document.body, 'propertyCount', propertyCount);

//keep only one unit and remove rest
var children = newDiv.find('#pnlUnits > #pnlUnitRepeater');
var unitCount = children.length;
var first = children.first();
for (i = 1; i < unitCount; i++) {
    children[i].remove();
}

newDiv.id = "pnlPropertySlider_" + propertyCount;

newDiv.insertBefore(btnObject);
}

我需要将名称属性分配为数组,以便可以在Request.Form中读取它。

修复无法更新id的问题:

  var newDiv = previous.clone(true).find("input,select").each(function () {
    $(this).attr({
        'name': function () {
            var name = $(this).attr('name');
            if (!name) return '';
            return name.replace(/property\[[0-9]+\]/, 'property' + propertyCount);
        }
    });
}).end().insertBefore(btnObject);

这种类型的事情应该可以工作。如果您使用Request.Form,您将能够在postback时访问所有带有名称的输入。您遇到的问题是命名问题,但是如果没有看到您的HTML,我无法提供太多帮助。 - Nick Bray
Request.Form没有动态创建的控件。我检查了每个属性,包括HtmlNameValue对或其他东西。但我在其他地方找到的解决方案基本上是使用jQuery序列化表单并进行后台提交。我甚至检查了浏览器发布的内容,它没有任何动态控件。因此,基本上您无法使用ASP.Net的提交表单机制,我确信它从视图状态中获取信息。我必须尝试禁用视图状态。我将发布我的研究结果。 - ASR
1个回答

0
问题看起来像以下这行代码:
$(this).attr("name").replace(($(this).attr("name").match(/\[[0-9]+\]/), cntr));

这个语句不会做任何事情。JavaScript中的字符串是不可变的,.replace只会返回替换后的字符串。
然后你必须将 attr("name") 实际设置为具有替换值的新字符串: http://api.jquery.com/attr/ 如果没有看到你的HTML,我不能提供更多帮助。

谢谢你的提示。我使用以下代码成功解决了它。 - ASR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接