バインド方法リピータのラベルにデータを保存します。
<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のテキスト属性が設定されておらず、データ
は、ラベルの体内のコントロールにクライアント側で拘束されています。
は、ラベルがページにレンダリングされた後にspanタグに書き込まれ、ラベルコントロールに直接関連付けられません。これは、Labelの本文でインラインスクリプトを使用する場合にのみ発生し、単なるテキストの場合は、ラベルの本文が常に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;
}
プラグインして余分なラベルを追加すると、Label3が空のときにLabel4に探しているデータが表示されます。
Lush、HTML/ASPXのスニペットを投稿して、これをどのように生成しているかを表示できますか? –
実際にURLや生のHTML出力を投稿できるのであれば、私は多くのことを伝えることができます。私はFireBugを使用して、情報が画面にどのように出力されたかを確認します。それとクイックウォッチの間に何かを見つけるのは簡単です –
出力HTMLは空のスパンです。 –