JavaScript Asp.net重复控件

时间:2013-08-16 20:10:43

标签: javascript jquery asp.net webforms

我正在尝试使用Asp.net 3.5 / IIS

具有顶级可重复形式的网络表单。所以基本上是一个Order-> Products-> ProductsParts有点像scenerio。订单只有一个。产品是可重复的。每种产品都有可重复的产品部件。产品和产品部分有很多字段,所以我不能使用网格。

因此,我为产品添加/删除按钮,并为每个产品部件添加/删除按钮。

这是我的要求。在使用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);
}

我需要将name属性指定为数组,以便我可以在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);

1 个答案:

答案 0 :(得分:0)

问题如下所示:

$(this).attr("name").replace(($(this).attr("name").match(/\[[0-9]+\]/), cntr));

此声明不做任何事情。 JavaScript中的字符串是不可变的,而.replace只返回被替换的字符串。

然后,您必须将attr("name")实际设置为具有替换值的新字符串: http://api.jquery.com/attr/

如果没有看到您的HTML,我无法帮助您。