我对此比较陌生,但这是我的问题。
在asp.net中,我有一个父级和一个子控件。在子控件中我有一个下拉列表。根据下拉列表的选定值,我想在父控件中切换面板的可见性。例如,如果我在子控件下拉列表中选择显示,我需要将true传递给父控件以使Panel可见,反之亦然。我该怎么做我已经读过可以通过事件处理完成并看到某些情况,但我不清楚。请帮忙!
感谢。
答案 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'中声明。