3

Asp.net 3.5/IISで次のことをしようとしています

トップレベルの繰り返し可能なフォームを持つ Web フォーム。つまり、基本的には Order->Products->ProductsParts のようなシナリオです。注文は1つだけです。製品は反復可能です。各製品には、反復可能な製品パーツがあります。製品と製品部分にはたくさんのフィールドがあるため、グリッドを使用できません。

そのため、製品の追加/削除ボタンと、各製品内の各製品パーツの追加/削除ボタンがあります。

それが私の要件です。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 で読み取ることができるように、name プロパティを配列として割り当てる必要があります。

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

1 に答える 1

0

問題は次の行のようになります。

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

このステートメントは何もしません。JavaScript の文字列は不変であり、.replace何かを置き換えた文字列のみを返します。

attr("name")次に、値を置き換えた新しい文字列 に実際に設定する必要があります: http://api.jquery.com/attr/

HTML が表示されない限り、これ以上のことはできません。

于 2013-08-16T21:47:22.353 に答える