Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将值从一个用户控件传递到另一个用户控件_C#_Asp.net_User Controls - Fatal编程技术网

C# 将值从一个用户控件传递到另一个用户控件

C# 将值从一个用户控件传递到另一个用户控件,c#,asp.net,user-controls,C#,Asp.net,User Controls,我有三个用户控件uc1.ascx、uc2.ascx、UC_Combined.ascx UC1有一个标签控件 UC2有一个下拉列表控件 UC_Combined是通过组合UC1和UC2创建的 现在我将UC_Combined.ascx放在我的aspx页面webForm1.aspx还有一个标签servercontrol 现在,当我运行我的webForm1.aspx页面时,我可以看到下拉列表和标签 现在,当我从下拉列表中选择一个项目时,我希望选择的值显示在标签上 有人能建议我怎么做吗。在父控件和子控件之间

我有三个用户控件uc1.ascx、uc2.ascx、UC_Combined.ascx

UC1有一个标签控件

UC2有一个下拉列表控件

UC_Combined是通过组合UC1和UC2创建的

现在我将UC_Combined.ascx放在我的aspx页面webForm1.aspx还有一个标签servercontrol

现在,当我运行我的webForm1.aspx页面时,我可以看到下拉列表和标签

现在,当我从下拉列表中选择一个项目时,我希望选择的值显示在标签上


有人能建议我怎么做吗。

在父控件和子控件之间创建依赖关系不是最好的。你通常应该避免的事情。但是,如果你不得不这样做,或者以某种方式让你的生活变得更轻松,那么有一些技术可以实现这一点,同时保持控制的某种解耦。我建议您执行以下操作:

  • 实现一个回发处理程序,该处理程序将DropDownList的值存储在HTTP上下文的“Items”集合中(通过HttpContext.Current.Items[“ddlValue”]=val)。“Items”集合是一个哈希表,它的生命周期只有一个HTTP请求。这意味着在当前HTTP请求得到响应后,它将被清除。这是一种很好的在组件之间传输数据的轻量级方法
  • 在UC1中实现一个属性,该属性惰性地从“Items”集合加载值,并使用语法引用标记中的属性。这样做可以确保在执行回发处理程序事件并添加“Items”条目之后,在呈现(代码执行时)之前不会尝试获取值。这样,您可以在同一回发中完成所有操作

  • 你认为你明白了吗?

    简单。在uc上执行包含下拉列表的事件,如:

        public event EventHandler<DDSelectionChangedEventArgs> DDSelectionChanged;
    
        public virtual void OnDDSelectionChanged(DDSelectionChangedEventArgs e)
        {
            if (DDSelectionChanged != null)
            {
                DDSelectionChanged(this, e);
            }
        }
    
    公共事件事件处理程序DDSELECTION已更改;
    公共虚拟无效OnDDSelectionChanged(DDSelectionChangedEventArgs e)
    {
    如果(DDSelectionChanged!=null)
    {
    DDS选择已更改(本,e);
    }
    }
    
    dd的selection changed处理程序必须调用OnDDSelectionChanged

    在页面(aspx)中的该事件上注册处理程序。然后,这个处理程序应该使用文本框在第二个uc上调用类似ChangeText(text)的内容。文本框已更新


    因此,uc之间的通信由事件驱动,页面有责任连接事件。加州大学是完全独立的。

    出于好奇,你到底想在这里实现什么?用户控件旨在跨多个页面/控件重用逻辑。用户控件之间不应该存在依赖关系(可以有父/子控件,但不能有子/子控件)为什么不将下拉控件/标签放在UC_组合控件?代码中。顺便说一句,您可以使用“Parent”访问父控件,然后访问您试图访问的子控件。Nice+1.充分利用不利局面=)