2012-02-20 66 views
5

這是我的代碼,.ascx頁:asp:TextBox上的動態ID?

<% for (int i = 1; i <= 10; i++) 
    { %> 
    <asp:TextBox ID="myTextBox_<%=i %>" runat="server" Width="100%" CssClass="focus_out reset_content"></asp:TextBox> 
<% } %> 

,但我得到myTextBox_<%=i %>不是有效的識別器。那麼,我怎麼能把「動態ID」?

+1

實現效果的一種可能性是使用html屬性,並根據循環中的迭代進行分配。例如'data-id' – 2012-02-20 14:18:02

+0

喬治:你能舉個例子嗎? – markzzz 2012-02-20 14:19:02

+1

而不是有一個用戶控件,爲什麼你不使用帶有'TextBox'控件作爲模板的''控件? – balexandre 2012-02-20 14:22:55

回答

5

您需要爲文本框(如Panel控件)創建容器,然後在後面的代碼中使用Page_Load循環並將文本框添加到面板。

實施例:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>Untitled Page</title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:Panel ID="pnlContainer" runat="server" /> 
    </div> 
    </form> 
</body> 
</html> 

代碼後面:

using System; 
using System.Configuration; 
using System.Data; 
using System.Linq; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

     for (int i = 1; i <= 10; i++) { 

      TextBox txtNewTextBox = new TextBox(); 
      txtNewTextBox.ID = "myTextBox_" + i; 
      pnlContainer.Controls.Add(txtNewTextBox); 

     } 

    } 
} 
+0

你能舉個例子嗎? – markzzz 2012-02-20 14:24:31

+0

我懷疑他是指在'Page_Load'方法中循環並調用'someContainer.Controls.Add(new TextBox(){ID:「someId」});'爲每個文本框,其中'someContainer'爲'Panel'或其他容器 – WickyNilliams 2012-02-20 14:27:29

+0

我的真實情況,不幸的是,它有點不同!事實上,在容器中,我需要有其他的html元素。所以我不會添加它們循環面板... – markzzz 2012-02-20 14:47:16