簡體   English   中英

如何在頁面加載時將值從用戶控件傳遞到ASPX頁面?

[英]How to pass value from user control to aspx page on pageload?

場景非常簡單。 我有一個帶用戶控件的aspx頁面。 我想設置一個值,並從aspx頁面的頁面加載上的usercontrol獲得響應。 SET作業已完成,但無法獲取響應。 它總是空的。 我嘗試了兩種方法,但沒有一種有效。

ASPX頁面

<uc1:ucContent ID="Content1" runat="server" />

后面的代碼

protected void Page_Load(object sender, EventArgs e)
{
    // SET job is working without any problem
    Content1.ItemName = "X";

    //METHOD ONE:
    Page.Title = Content1.MetaPageTitle;

    //METHOD TWO:
    HiddenField hdnPageTitle = (HiddenField)Content1.FindControl("hdnMetaPageTitle");
    Page.Title = hdnPageTitle.Value;
}

用戶控制

protected void Page_Load(object sender, EventArgs e)
{
    if (string.IsNullOrEmpty(itemName))
    {
         // GET DATA FROM DB

         // METHOD ONE:
         hdnTitle.Value = DB.DATA;

         // METHOD TWO:
         metaPageTitle = DB.DATA;
    }
}

private string metaPageTitle;
public string MetaPageTitle
{
    // METHOD ONE:
    get { return metaPageTitle; }

    // METHOD TWO:
    get { return hdnTitle.value; }
}

編輯

itemName是一個UserControl屬性,用於從父頁面獲取值:

private string itemName;
public string ItemName
{
    set { itemName = value; }
}

感謝您的提前幫助!

我認為問題在於pagePage_Load是在UserControl之前觸發的(看看: asp.net:與控件內部的用戶控件相比,控件/頁面的頁面生命周期順序是多少? )。

因此,您可以在Page_init設置屬性:

在您的UserControl

protected void Page_Init(object sender, EventArgs e)
{
    if (string.IsNullOrEmpty(itemName))
    {
         // GET DATA FROM DB

         hdnTitle.Value = DB.DATA;
    }
}

現在,這應該可以在您頁面的Page_Load

Page.Title = Content1.MetaPageTitle;

通常,我希望在Page和UserControl之間進行另一種通信。 這稱為事件驅動的通信,這意味着當MetaPageTitle更改時(因此在適當的事件處理程序中),您應該在UC中觸發自定義事件。

然后頁面可以處理此特定事件並做出相應反應。

掌握頁面-用戶控制通信-事件驅動的通信

暫無
暫無

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

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