从子控制到父控制共享价值

时间:2010-10-11 19:20:40

标签: asp.net user-controls web-controls

我对此比较陌生,但这是我的问题。

在asp.net中,我有一个父级和一个子控件。在子控件中我有一个下拉列表。根据下拉列表的选定值,我想在父控件中切换面板的可见性。例如,如果我在子控件下拉列表中选择显示,我需要将true传递给父控件以使Panel可见,反之亦然。我该怎么做我已经读过可以通过事件处理完成并看到某些情况,但我不清楚。请帮忙!

感谢。

3 个答案:

答案 0 :(得分:4)

引发父控件侦听的事件。

在父控件的后台代码中,创建一个子控件类型的对象。类似的东西:

private MyWebControl childControl;

然后在子控件中定义一个事件

public event System.EventHandler SelectionChanged;

在您的DropDownList的OnIndexChanged事件中,在您进行处理后,举起您的活动:

if(this.SelectionChanged!= null)
{
     this.SelectionChanged(this, new EventArgs()); 
     // You can send the index of the DDL in the event args
}

在您的父控件中,连接事件。 Page_Init很好

this.childControl.SelectionChanged+=new EventHandler(childControl_SelectionChanged);

仍然在父控件中,定义您的方法

private void childControl_SelectionChanged(object sender, EventArgs e)
{
      /// Do your processing here.
      /// Grab the DDL's index from the EventArgs and do your processing

}

应该只需要它就能让它运转起来!

答案 1 :(得分:0)

执行此操作的一种方法是公开下拉列表(公共),并在父控件中检查子控件下拉列表,以查看它是否应在页面加载时显示或隐藏面板。如果这是否有效取决于页面生命周期。

另一种方法是将更改事件中的下拉值存储在ViewState中。这样,父控件就可以读取ViewState参数。

如果可能的话,你一定要选择第一个选项。

答案 2 :(得分:0)

基本上,您只需订阅SelectedIndexChanged事件并处理它。更改所选项目时会触发该事件。请注意,您应该允许在下拉控件上进行自动回发,以确保在用户更改下拉列表值后立即触发事件。

在ASPX文件中:

< asp:DropDownList ... OnSelectedIndexChanged =“OnDropDownChanged”> ...< / asp:dropDownList>

如果您在代码隐藏中创建控件,请在创建控件后订阅:

dropDown.SelectedIndexChanged += OnDropDownChanged;

然后处理它:

public void OnDropDownChanged(object sender, EventArgs e)
{
    // alter the panel's visibility here; the drop down's value contains
    // the selected item; note that you shoud use "(DropDownList)sender"
    // to access it
}

编辑:另外,请查看更详细的example on MSDN。请注意,事件在DropDownList的祖先'ListControl'中声明。