2013-03-13 46 views
3

我想從listview一些動態信息傳遞給UserControl裏面,但我想我失去了一些東西。傳遞變量用戶控件列表視圖(asp.net,C#)

.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」 任何人都可以看到我在做什麼錯了嗎?謝謝你,吉姆·橡樹

+0

謝謝。我有完全相同的問題。 – Pitarou 2013-05-23 14:00:52

回答

4

DataBinding在控制生命週期中比Load晚很多。

您將其分配上加載文本,但你的控制只接收在DataBind

文本爲了解決這個問題,你可以設置你的文字OnPreRender。這發生在DataBind

protected override void OnPreRender(EventArgs e) 
{ 
    NameLabel.Text = Name_Lbl; 
    DescriptionLabel.Text = Description_Lbl; 
} 
+0

謝謝,那幫了我! – Oak 2013-03-13 10:21:20

+0

歡迎您! – nunespascal 2013-03-13 10:23:32

+0

我也有同樣的問題。謝謝! – Pitarou 2013-05-23 14:00:32

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" /> 
+0

嗨,對不起,我在創建這個主題時做了這個。 – Oak 2013-03-13 10:00:23

+0

你檢查過aspx代碼後面的數據源嗎?結果集有這些字段「名稱」和「描述」的值? – 2013-03-13 10:06:57

+0

是的,如果我在itemtemplate中粘貼.ascx代碼,一切正常。當我將變量傳遞給usercontrol時,我想我會錯過一些東西。 – Oak 2013-03-13 10:10:28