如何在页面加载时将值从用户控件传递到aspx页面?

时间:2014-08-11 13:39:12

标签: c# asp.net user-controls get set

场景非常简单。我有一个带有用户控件的aspx页面。我想在aspx页面的pageload上设置一个值并从usercontrol获取响应。 SET作业已完成,但无法获取响应。它总是空的。我尝试了两种方法,但都没有。

ASPX PAGE

<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; }
}

感谢你提前给予的帮助!

1 个答案:

答案 0 :(得分:1)

我认为问题是page的{​​{1}}是在Page_Load之前触发的(看看:asp.net: what's the page life cycle order of a control/page compared to a user contorl inside it?)。

因此,您可以在UserControl中设置属性:

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和UserControl之间的另一种通信。它被称为事件驱动的通信,意味着当Page.Title = Content1.MetaPageTitle; 发生变化时,您应该在UC中触发自定义事件(因此在适当的事件处理程序中)。

然后页面可以处理此特定事件并做出相应的反应。

Mastering Page-UserControl Communication - event driven communication