2013-08-16 49 views
3

我正在嘗試使用Asp.net 3.5/IIS執行以下操作:JavaScript Asp.net重複控件

具有頂級可重複表單的Web表單。所以基本上是一個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

幫助,請閱讀!

強大的文本修復不更新不工作IDS:

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); 
+0

這種類型的東西應該工作。如果您使用Request.Form,您將有權訪問所有帶有回傳名稱的輸入。你所遇到的問題是命名,但是如果沒有看到你的html,我不能幫你太多。 –

+0

Request.Form沒有動態創建的控件。我檢查了每個屬性,包括HtmlNameValue對或其他東西。但是我在其他地方找到的解決方案基本上是使用jquery來序列化表單並進行回發。我檢查了哪些瀏覽器發佈,它沒有任何動態控制。所以,基本上你不能使用ASP.Nets提交表單機制,它肯定會從視圖狀態獲取信息。我必須嘗試禁用視圖狀態。我會張貼我的發現 – ASR

回答

0

問題看起來像以下行:

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

這種說法沒有做任何事情。 JavaScript中的字符串是不可變的,並且.replace僅返回字符串,並替換某些內容。

你將不得不以實際設置attr("name")到具有替代價值的新的字符串: http://api.jquery.com/attr/

我不禁更加沒有看到你的HTML。

+0

Tx的結果。我能夠使用下面的代碼來解決它。 – ASR