它涉及到如何綁定將數據發送到中繼器上的標籤。
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<asp:Label ID="Label1" runat="server"><%# DataBinder.Eval(Container.DataItem,"CustomerName") %></asp:Label>
<asp:Label ID="Label2" runat="server" Text=<%# DataBinder.Eval(Container.DataItem,"Country") %>></asp:Label>
</ItemTemplate>
</asp:Repeater>
Label1的文本屬性未設置和數據
被在客戶端結合到在標籤的本體控制。
在Label已經呈現到頁面之後被寫入span標記,並且永遠不會直接綁定到Label Control。只有當您在標籤主體中使用行腳本時纔會發生這種情況,如果它只是文本,則標籤的主體始終會覆蓋Label的Text Attribute值。
對於Label2的文本屬性被設置
因此正在發生服務器
迫使它呈現完畢後的標籤,因此你的其他控件訪問之前評估內嵌腳本的結合。
沒有真正看到你的中繼器,我懷疑這是你的數據綁定的方式。
這裏有一些測試代碼向你證明這種情況。
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
DataSet ds = new DataSet();
DataTable dt = ds.Tables.Add("Customer");
dt.Columns.Add("CustomerName", Type.GetType("System.String"));
dt.Columns.Add("Country", Type.GetType("System.String"));
DataRow dr = dt.NewRow();
dr[0] = "Testcustomer1";
dr[1] = "USA";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "Testcustomer2";
dr[1] = "UK";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "Testcustomer3";
dr[1] = "GERMANY";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr[0] = "Testcustomer4";
dr[1] = "FRANCE";
dt.Rows.Add(dr);
//Bind the data to the Repeater
Repeater1.DataSource = ds;
Repeater1.DataMember = "Customer";
Repeater1.DataBind();
}
}
protected void SubmitMessage_Click(object sender, EventArgs e)
{
Label MyLabel = (Label)Repeater1.Items[0].FindControl("Label1");
Label MyLabel2 = (Label)Repeater1.Items[0].FindControl("Label2");
//Empty String Text was never set server side
Label3.Text = MyLabel.Text;
//String is found because Text was set
Label4.Text = MyLabel2.Text;
}
插入並添加幾個額外的標籤,您將看到Label4有您正在查找的數據,而Label3是空白的。
鬱鬱蔥蔥,你可以發佈你的HTML/ASPX片段告訴我們你是如何產生這個。 – 2009-05-23 00:46:07
實際上,如果您可以發佈URL或原始HTML輸出,我可以告訴很多 - 我通常使用FireBug來查看信息如何輸出到屏幕。它和quickwatch之間很容易找到任何東西 – 2009-05-23 05:10:24
輸出HTML只是一個空白的跨度。 – 2009-05-23 14:21:29