【问题标题】:How to pass value from user control to aspx page on pageload?如何在页面加载时将值从用户控件传递到 aspx 页面?
【发布时间】:2014-08-11 13:39:12
【问题描述】:

场景非常简单。我有一个带有用户控件的 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; }
}

提前感谢您的帮助!

【问题讨论】:

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


    【解决方案1】:

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

    所以你可以在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;
    

    通常我更喜欢页面和用户控件之间的另一种通信。它被称为事件驱动的通信,意味着当MetaPageTitle 更改时,您应该在您的UC 中触发一个自定义事件(因此在适当的事件处理程序中)。

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

    Mastering Page-UserControl Communication - event driven communication

    【讨论】:

    • 感谢您的回答!现在的问题是我无法在用户控制端获取值。我的意思是“itemName”总是空的。
    • 我不知道itemName是什么,你还没展示出来。
    • @Kardo:然后提供一个方法SetItemName 设置此属性并将其存储在某处(例如在 ViewState、HiddenField、Session 中)。在这种方法中,您应该调用您的// GET DATA FROM DB-logic。
    • 非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多