3

我想从 to 传递一些动态信息listviewUserControl但我想我错过了一些东西。

.aspx 页面:

<asp:ListView ID="ListView1" runat="server" DataSourceID="SqlDataSource"
        DataKeyNames="id_Image">
  <ItemTemplate>
       <uc1:Info Name_Lbl='<%# Bind("Name") %>'   Description_Lbl='<%# Bind("Description")%>' ID="info1"  runat="server" />
  </ItemTemplate>
</asp:ListView>

.ascx 文件:

Name:
<asp:Label ID="NameLabel" runat="server"  />
Description:
<asp:Label ID="DescriptionLabel" runat="server"  />

.ascx 代码隐藏文件:

public string Name_Lbl { get; set; }
public string Description_Lbl { get; set; }

protected void Page_Load(object sender, EventArgs e)
{  
    NameLabel.Text = Name_Lbl;
    DescriptionLabel.Text = Description_Lbl;  
}

如果我试图从字符串文本中获取价值,一切都很好:

<uc1:Info Name_Lbl="Name"   Description_Lbl="Description" ID="info1"  runat="server" />

但是当我试图从中获取值时Datasource,usercontrol 中的字符串值为“null” 谁能看到我做错了什么?谢谢,吉姆·奥克

4

2 回答 2

4

DataBinding 在控件生命周期中发生的时间比Load.

您在 Load 上分配文本,但您的控件仅在DataBind

要解决此问题,您可以设置 text OnPreRender。这发生在DataBind

protected override void OnPreRender(EventArgs e)
{  
    NameLabel.Text = Name_Lbl;
    DescriptionLabel.Text = Description_Lbl;  
}
于 2013-03-13T10:14:33.517 回答
1

您的代码中的一切看起来都很好,只需检查代码行:

<uc1:Info Name_Lbl='<%# Bind("Name") %>'   Description_Lbl='<%# Bind("Description"%>' ID="info1"  runat="server" />

您缺少针对 Description_Lbl 的右括号“)”。它应该是:

<uc1:Info Name_Lbl='<%# Bind("Name") %>'   Description_Lbl='<%# Bind("Description")%>' ID="info1"  runat="server" />
于 2013-03-13T09:55:07.190 回答