0

我想知道直接分配屬性綁定到一個asp動態創建的用戶控件的最佳方法:直放站。考慮下面的代碼。分配屬性用戶控件數據綁定到ASP:直放站

在代碼隱藏的用戶控件 「MyControlType」:

public bool IsRetained = false; 

在頁面代碼:

​​

在頁面代碼隱藏:

protected List<MyControlType> dataSource = new List<MyControlType>(); 

protected void someButton_Click(object sender, EventArgs e) 
{ 
    MyControlType myItem = (MyItem)Page.LoadControl("~/MyMath/MyControlType.ascx"); 
    dataSource.Add(myItem); 
    myItem.IsRetained = true; 
    repeater.DataBind(); 

    // test code 
    MyControlType realItem = repeater.Items[0].Controls[1] as MyControlType; 
    bool test0 = realItem.IsRetained; // false 
    bool test1 = myItem == realItem; // false 
} 

新MyControlType是成功綁定到Repeater並顯示在頁面上,但它沒有我設置的IsRetained值。它也不是我分配給dataSource的MyControlType實例。

我可以完成我想通過獲得對創建MyControlType參考類似我如何與realItem的確在上面的例子,但我寧願財產直接通過myItem分配。任何人都可以提供這樣做的方法嗎?這也很好理解爲什麼test0和/或test1是錯誤的。謝謝!

回答

0

編輯:

沒有與您的方法幾個問題:

  1. 你正在創建List<MyControlType>,並試圖使用它作爲 數據源。

  2. 您正在初始化並將myItem添加到列表,並希望在數據綁定後您可以在Repeater中找到UserControl 。

  3. 您要添加的用戶控件到Repeater在標記後 數據綁定你發現在直放站項目中繼器和 希望這將有已分配給myItem值。

解決方案: 使用更好的數據源來進行測試,例如List<string>。這裏的中繼器會是什麼樣(在repescet測試數據):

<asp:Repeater ID="repeater" runat="server"> 
    <ItemTemplate> 
     <pre:MyControlType IsRetained='<%#Container.DataItem == "item 1" ? true : false %>' runat="server" /> 
    </ItemTemplate> 
</asp:Repeater> 

而且在我的代碼我測試這樣的:

protected void someButton_Click(object sender, EventArgs e) 
{ 
    var lst = new List<string>() { "item 1", "item 2", "item 3" }; 
    repeater.DataSource = lst; 
    repeater.DataBind(); 

    // test code 
    MyControlType realItem1 = repeater.Items[0].Controls[1] as MyControlType; 
    MyControlType realItem2 = repeater.Items[1].Controls[1] as MyControlType; 
    MyControlType realItem3 = repeater.Items[2].Controls[1] as MyControlType; 
    bool test1 = realItem1.IsRetained; // true (data == "item 1") 
    bool test2 = realItem2.IsRetained; // false (data != "item 1") 
    bool test3 = realItem3.IsRetained; // false (data != "item 1") 
} 

你可以看到我們在這裏預期的結果。

+0

感謝,但有問題的控制將是許多在Repeater控件中的一個,我不明白有多麼一個ViewState屬性會有所幫助。是的,我可以用稍微更復雜的方式將它們填充到ViewState中,但我甚至不主要關注在此示例中持續回傳 - 僅在數據綁定時成功包含簡單屬性。 – chris4600

+0

對不起,無法理解你的意思是「衆多之一」。中繼器中的每個用戶控件實例都將使用不同的ViewState。 – afzalulh

+0

謝謝,你是對的,我誤解了一些東西。我最終可能會使用這種方法。 – chris4600

相關問題