选择新项目后,用户控件中的下拉列表和自动回发

时间:2012-12-20 20:24:52

标签: asp.net

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

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

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

由于

用户控制代码

protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)

{

        _SelectedPageSize = Convert.ToInt32(ddlPageSize.SelectedValue);

}



int GetSelectedPageSize()

{

       return _SelectedPageSize;
}

1 个答案:

答案 0 :(得分:1)

有很多方法可以实现您的目标。第一个是简单地在包含页面中重新排序您的事件。如果您使用PreRender事件而不是PageLoad事件,则您的下拉选择操作将完成,并且信息将随时可用。

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

第三种方法,更严格一点,就是在数据完成后由usercontrol调用的包含页面中有一个函数。这要求usercontrol知道它将包含在哪个特定页面类型中(使其不易扩展),所以我不推荐它。

编辑:以下是使用自定义事件实现选项#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
}