3

I am trying to do the folowing with Asp.net 3.5/IIS

A web form with a top level repeatable form. So basically a Order->Products->ProductsParts kinda of scenerio. Order is only one. Product is repeatable. Each product has repeatable products parts. The product and product part have a whole bunch of fields so I cannot use a grid.

So, I have add/remove buttons for Product and within each product add/remove buttons for each product part.

That is my requirement. I have been able to achieve add/remove after some research using jquery/js. How, do i capture this data on the server? Since javascript is adding and removing these controls they are not server side and I don't know how to assign name attributes correctly. I am trying following javascript but it ain't working:

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);
}

I need to assign name property as array so that I can read it in Request.Form

Fix for not updating ids not working:

  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);
4

1 回答 1

0

The issue looks like the following line:

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

This statement doesn't do anything. Strings in JavaScript an immutable, and .replace only returns the string with something replaced.

You would then have to actually set the attr("name") to the new string that has the replaced value: http://api.jquery.com/attr/

I can't help much more without seeing your HTML.

于 2013-08-16T21:47:22.353 回答