2011-05-05 15 views
0

我有一個設置文本框,用戶在其中輸入內容,然後單擊提交時使用它們。我需要添加一個按鈕,讓他們隨時添加另一組相同的文本框,將數據輸入到這些文本框中,然後當按下提交按鈕時,我需要從兩組中獲取值。增加的項目數量可以是無限的。如何在ASP.NET中添加/閱讀項目

在ASP.NET/C#中處理這種事情的最佳方式是什麼?

我環顧四周,基本上只有得到,你可以嘗試在前端使用JQuery的後端,使後端混亂,或者你可以嘗試使用GridView,每次重新綁定新項目,可以得到亂。

任何更好/更簡單的方法來做到這一點?

感謝您的幫助。

+0

您可以在Page_PreInit中將控件添加到ASP.NET中,這會使它們參與常規頁面生命週期並在回發中重新填充。但是如果你想添加控件而不回發給服務器,你需要在瀏覽器中處理它,這可能意味着使用javascript/jQuery。 無論你還需要什麼書籍,但另一種方法是使用DataRepeater或DataGrid等ASP.NET數據控件。 – faester 2011-05-05 20:57:23

回答

1

對第一組文本框使用Repeater控件,併爲每個額外列表重複使用。

這是我的評論控制中繼器。這有點神祕,因爲它是我在asp.net中創建的第一個控件,但它會讓你走。

<asp:Repeater runat="server" ID="repeater" 
    onitemdatabound="repeater_ItemDataBound" 
    > 
    <HeaderTemplate> 
    <table border="0" cellpadding="0" cellspacing="0" width="100%"> 
    </HeaderTemplate> 
    <FooterTemplate> 
    </table> 
    </FooterTemplate> 
    <ItemTemplate> 
    <tr id="trContents" runat="server"><td> 
     <table id="tableComment" runat="server" 
     width="100%" style="border-color:Black; border-width:1px; border-style:solid;background-color:#EEEE99"> 
     <tr><td id="tdHeader" runat="server" 
      style="border-color:Black; border-width:1px; border-style:solid;padding: 5px"> 
      <table width="100%" id="tableHeader" runat="server"> 
      <tr> 
       <td> 
       <asp:Label ID="headerText" runat="server" 
        Text="<%# GetHeader((CommentRecord)Container.DataItem) %>" /> 
       </td> 
       <td style="text-align:right"> <%-- OnClientClick="aspnetForm.target ='_blank';" --%> 
       <asp:Button ID="btnEdit" runat="server" Text="Edit" 
        PostBackUrl="<%$ AppSettings:TextEditor %>" 
        /> 
       <asp:Button ID="btnReply" runat="server" Text="Reply" 
        PostBackUrl="<%$ AppSettings:TextEditor %>" 
        /> 
       </td> 
      </tr> 
      </table> 
     </td></tr> 
     <tr><td style="border-color:Black; border-width:1px; border-style:solid;background-color:#FFFFF0;padding: 10px"> 
      <%# ((CommentRecord)Container.DataItem).Text %> 
     </td></tr> 
     <tr><td> 
      <table width="100%"><tr> 
      <td style="text-align:left"> 
       <asp:Button ID="btnDelete" runat="server" Text="Delete" 
        CausesValidation="False" /> 
      </td> 
      <td style="text-align:right"> 
       <asp:Label ID="footer" runat="server" Text="<%# GetFooter((CommentRecord)Container.DataItem) %>" /> 
      </td> 
      </tr></table> 
     </td></tr> 
     </table> 
     <asp:PlaceHolder ID="placeHolder" runat="server" /> 
    </td></tr> 
    </ItemTemplate> 
</asp:Repeater> 
1

我最常做的在這些情況下是必須的Javascript處理該客戶端動態創建額外的文本框,然後在我提交的價值觀,已經收集到一個JSON對象中的所有數據和JSON字符串保存到<asp:HiddenField>控制ASP.NET可以讀取和解析。這不是一個完全乾淨的方法,但這是迄今爲止我發現的最好的東西。

+0

我從來沒有這樣的事情。您曾使用/看過的任何鏈接瞭解它? – markiyanm 2011-05-05 21:00:52

+0

爲了解析.NET端的JSON,我使用了[James Newton-King的JSON.NET庫](http://james.newtonking.com/pages/json-net.aspx)。爲了動態生成DOM對象,我推薦使用JQuery。我搜索了關於如何使用JQuery動態添加表單元素的信息,並且提出了[this](http://mohdshaiful.wordpress.com/2007/05/31/form-elements-generation-using-jquery/) 。 – 2011-05-05 21:18:41

0

我會創建使用jQuery的文本框(分配它們一個唯一的ID),然後從Request.Form鍵/值集合獲取服務器上的值。這將是一個相當簡單的解決方案。

0

我建議使用GridView方法,並將其綁定到DataSource對象,例如ObjectDataSource控件。點擊添加按鈕應該爲數據源添加一個空行,這個空行將自動被GridView繪製。當一切正常時,您可以在UpdatePanel中進行換行,以在添加行時實現平滑刷新。