如何在用户控件中访问“父窗口的隐藏字段”

时间:2012-03-29 09:12:35

标签: c# asp.net

我有1个aspx页面和1个用户控件。我想在用户控制页面后面的代码中访问aspx页面的隐藏字段。

请帮我解决这个问题。

2 个答案:

答案 0 :(得分:3)

使用Page.FindControl

var hiddenField = this.Page.FindControl("hiddenField") as HiddenField;

答案 1 :(得分:2)

以下是一种方法:

  • 将隐藏字段控件公开为包含页面的公共属性。
  • 在用户控件中,将Page强制转换为包含页面的特定类型。
  • 访问该物业。

我不喜欢这种方法,因为它将用户控件与包含的页面类型紧密结合,但这似乎经常出现在Web表单中。

示例

public class MyPage : Page
{
    public HtmlInputHidden MyHiddenField
    {
        get{ return this.hdnField1; }
    }
}

public class MyUserControl : UserControl
{
    protected override OnLoad( EventArgs e )
    {
        MyPage p = (MyPage)Page;
        HtmlInputHidden h = p.MyHiddenField;
    }
}

示例2 - 父级初始化子级

这个例子更清晰,因为孩子不知道其父母。但是,它需要父级在正确的时间初始化子级(这对于Web表单页生命周期来说可能很棘手)并且要求父级知道子级的内部工作。

public class MyPage : Page
{
    protected override OnLoad( EventArgs e )
    {
        this.MyUserControl.Initialize( this.MyHiddenField );
    }
}

public class MyUserControl : UserControl
{
    public void Initialize( HtmlInputHidden input )
    {
        // now child user control has access to the data without needing to know
        // about its parent
    }
}