【问题标题】:dropdown list in user control and auto postback after new item selected用户控件中的下拉列表和选择新项目后的自动回发
【发布时间】:2012-12-20 20:24:52
【问题描述】:

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

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

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

谢谢

用户控件的代码

protected void ddlPageSize_SelectedIndexChanged(object sender, EventArgs e)

{

        _SelectedPageSize = Convert.ToInt32(ddlPageSize.SelectedValue);

}



int GetSelectedPageSize()

{

       return _SelectedPageSize;
}

【问题讨论】:

    标签: asp.net


    【解决方案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
    }
    

    【讨论】:

    • 感谢您提供上述任何方式的任何示例链接。谢谢
    • @msib:发布了带有示例的更新。选项 1 非常简单,因此不需要样本。不太推荐选项 3。
    猜你喜欢
    • 2020-01-31
    • 2011-12-24
    • 1970-01-01
    • 2011-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-23
    相关资源
    最近更新 更多