2015-08-19 65 views
0

我正在嘗試創建一個從空白處開始的網頁。隨着每個按鈕按下新的文本框添加刪除按鈕,以刪除他們想要的任何行。這很好。問題是我無法訪問使用C#動態創建的控件。如何從後面的代碼訪問這些動態創建的控件?

在下面的代碼中,我將它們設置爲<input我也試過使用<asp:Textbox,但它也沒有工作。 Request.Form["txtItemName1"]總是返回一個空白字符串,我不能在CS文件中執行txtItemName1.Text,因爲文本框還不存在。

我想如何訪問C#端的文本框?

有動態創建控件的更好方法嗎?

<!-- jQuery --> 
<script type="text/javascript"> 
    $(window).load(function() { 
     $(document).ready(function() { 
      var counter = 1; 
      $(document).on('click', '.removeButtonByID', function() { 
       var _name = this.name.replace("btnRemove", ""); 
       if (confirm('Are you sure you want to remove line ' + _name + '? This cannot be undone.')) { 
        $("#TextBoxDiv" + _name).remove(); 
       } 
      }); 

      $("#addButton").click(function() { 
       $('<div />', { 'id': 'TextBoxDiv' + counter }).html(
        $('<label />').html('') 
       ) 
        .append($('<div class="col-sm-1" style="width: 200px; padding-left: 7px; padding-right: 0px;"><input type="text" class="form-control" placeholder="Item Name" runat="server">').attr({ 'id': 'txtItemName' + counter, 'name': 'txtItemName' + counter })) 
        .append($('<div class="col-sm-1" style="width: 100px; padding-left: 7px; padding-right: 0px;"><input type="text" class="form-control" placeholder="D/I" runat="server">').attr({ 'id': 'txtDI' + counter, 'name': 'txtDI' + counter })) 

        .append($('<div class="col-sm-1"><label class="checkbox-inline"><input type="checkbox" value="">Subtotal</label>').attr({ 'id': 'subtotal' + counter, 'name': 'chkSubTotal' + counter })) 
        .append($('<br />')) 

       .append($('<button type="button"><span class="glyphicon glyphicon-minus"></span></button>').attr({ 'name': 'btnRemove' + counter, 'class': 'btn btn-danger removeButtonByID' })) 

       .appendTo('#TextBoxesGroup') 

       counter++; 
      }); 
     }); 
    }); 
</script> 

<!-- HTML --> 

<div id='TextBoxesGroup'> 
    <!-- Dynamically added textboxes here --> 
</div> 
<hr /> 
<button type="button" class="btn btn-default" id='addButton'> 
    <span class="glyphicon glyphicon-plus"></span> 
</button> 
+0

當您嘗試使用asp:Textbox時,您是否也包含runat =「server」? – Vahlkron

+0

你在ASP.net MVC中使用C#還是僅僅使用ASP.Net? – cDima

+0

是的,我做到了。我甚至手動在頁面上放置一個asp:Textbox來查看我是否可以訪問它並且我可以。只有動態控制才能避開我。 – duckwizzle

回答

1

C#後端將無法訪問動態jQuery創建的輸入字段。您可以使用後面的代碼在ASP.Net中創建服務器控件,並使用UpdatePanel as in the example

+0

可能有一點,此頁面將有超過100個文本框 - 我想我將不得不創建100個更新面板。這是最有效的方法嗎?對不起 - 網絡編程對我來說很新鮮。 – duckwizzle

+0

不,一個具有100個動態創建控件的更新面板可以正常工作。 – cDima

相關問題