它涉及到如何绑定将数据发送到中继器上的标签。
<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