0

我在用户控制中有一个下拉列表

当用户选择另一个项目时,如何在页面中获取用户控件下拉列表的选定值(自动回发为真)?

我试图将 ddl 的选定值存储在 Selected Index Changed 事件处理程序的公共成员中。但是这个处理程序在容器页面的页面加载之后执行。我需要根据用户控件的 ddl 中的选定值在页面中加载数据。

谢谢

用户控制代码

protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)

{

        _SelectedPageSize = Convert.ToInt32(ddlPageSize.SelectedValue);

}



int GetSelectedPageSize()

{

       return _SelectedPageSize;
}
4

1 回答 1

1

有多种方法可以完成您正在寻找的内容。第一个是简单地重新排序包含页面中的事件。如果您使用 PreRender 事件而不是 PageLoad 事件,您的下拉选择操作将完成并且信息将很容易获得。

第二种可能更具可扩展性的方法是从您的用户控件中引发一个自定义事件,您的页面将侦听和处理该事件。然后将在信息立即可用的地方直接采取行动。这允许任何包含结构(无论是页面、用户控件还是类似的东西)订阅事件并处理所需的任何内容。

第三种更严格的方法是在包含页面中有一个函数,一旦数据完成,用户控件就会调用该函数。这要求用户控件了解它将包含在其中的特定页面类型(使其可扩展性降低),因此我不推荐它。

编辑:这是使用自定义事件实现选项 #2 的想法:

public partial class MyUserControl: UserControl
{
    //All of your existing code goes in here somewhere

    //Declare an event that describes what happened. This is a delegate
    public event EventHandler PageSizeSelected;


    //Provide a method that properly raises the event
    protected virtual void OnPageSizeSelected(EventArgs e)
    {
        // Here, you use the "this" so it's your own control. You can also
        // customize the EventArgs to pass something you'd like.

        if (PageSizeSelected!= null)
            PageSizeSelected(this, e);
    }

    private void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)
    {
        _SelectedPageSize = Convert.ToInt32(ddlPageSize.SelectedValue);
        OnPageSizeSelected(EventArgs.Empty);
    }
}

然后在您的页面代码中,您将监听该事件。在页面加载的某处,您将添加:

myUserControlInstance.PageSizeSelected += MyHandinglingMethod;

然后提供处理事件的方法:

protected void MyHandlingMethod(object sender, EventArgs e)
{
    // Do what you need to do here
}
于 2012-12-20T20:30:58.100 回答