簡體   English   中英

將值從一個用戶控件傳遞到另一個用戶控件

[英]Passing value from One user control to another usercontrol

我有三個用戶控件uc1.ascx,uc2.ascx,UC_Combined.ascx

UC1具有一個標簽控件

UC2具有一個Dropdownlist控件

UC_Combined是通過組合UC1和UC2創建的

現在我將UC_Combined.ascx放置在我的aspx頁面上webForm1.aspx還有一個Label servercontrol

現在,當我運行我的webForm1.aspx頁面時,可以看到DropDown列表和Label

現在,當我從下拉列表中選擇一個項目時,我希望選擇的值顯示在標簽上

有人可以建議我該怎么做。

最好不要在父控件和子控件之間創建依賴關系。 通常應該避免的事情。 但是,如果您必須這樣做或以某種方式使您的生活更加輕松,那么可以通過一些技巧來實現此目的,同時保持控件之間的某種程度的分離。 我建議您執行以下操作:

  1. 實現一個PostBack處理程序,該處理程序將DropDownList的值存儲在HTTP上下文的“ Items”集合中(通過HttpContext.Current.Items [“ ddlValue”] = val)。 “項目”集合是一個哈希表,其壽命為單個HTTP請求。 這意味着在響應當前HTTP請求后將其清除。 這是在組件之間傳輸數據的一種很好的輕量級方法。
  2. 在UC1中實現一個屬性,該屬性可以從“ Items”集合中延遲加載值,並使用<%=%>語法在標記中引用該屬性。 這樣,可以確保在執行PostBack處理程序事件和添加“ Items”條目之后,以及在Render(執行<%=%>代碼時)之前,不嘗試獲取值。 。 這樣,您可以在同一個PostBack中完成所有操作。

想你明白了嗎?

簡單。 在uc上實現包含下拉列表的事件,如下所示:

    public event EventHandler<DDSelectionChangedEventArgs> DDSelectionChanged;

    public virtual void OnDDSelectionChanged(DDSelectionChangedEventArgs e)
    {
        if (DDSelectionChanged != null)
        {
            DDSelectionChanged(this, e);
        }
    }

然后,dd的選擇更改處理程序必須調用OnDDSelectionChanged。

將處理程序注冊到頁面(aspx)中的該事件上。 然后,此處理程序應使用文本框在第二個uc上調用類似ChangeText(text)之類的東西。 並且文本框已更新。

因此,uc之間的通信受事件驅動,頁面具有將事件連接起來的責任。 uc是完全獨立的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM