ASP.Net 用户控件事件冒泡 (C#)

标签 asp.net user-controls event-bubbling

非常感谢。我已经尽职调查并研究了 2 天,但似乎无法完全理解在线教程所描述的内容。

情况:首席程序员离职。公司的所有者知道我在一边做了一些(新手)VB.NET,并要求我在他的 Intranet 应用程序(用 C# 编写)上的 2 个自定义用户控件之间连接功能。回答专业人士的小考虑——我很流利在 Visual Studio 中...但仍在学习 C#)。

这是对控件的简化描述,但希望足以让我们朝着正确的方向前进:

UserControl_1 包含多个链接按钮,单击这些链接按钮时,应该更改 UserControl_2 中的 ObjectDataSource 使用的 SelectParameter 的值:

<asp:LinkButton ID="OpenBtn1" runat="server" Text="Show Open Requests" />
<asp:LinkButton ID="ClosedBtn1" runat="server" Text="Show Closed Requests" />

UserControl_2(带有数据源的 GridView):

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server"
    SelectMethod="GetDataBy_Status" 
    TypeName="adhoc_TblAdptrs.adhoc_TblAdptr">
    <SelectParameters>
       <asp:Parameter DefaultValue="All" Name="status" Type="String" />
    </SelectParameters>
</asp:ObjectDataSource>

<asp:GridView1 ID="GridView1" runat="server" DataSourceID="ObjectDataSource1" />

我想做的是将一个新的默认值传递给 UserControl_2 中 ObjectDataSource 的 SelectParameter。我期待专业人士的个性化解释!非常感谢您的帮助!

最佳答案

我将在 UserControl2 中公开一个属性,该属性将依次设置参数值

public string ParamValue { get; set; }

protected void ObjectDataSource1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e) {
    if (ParamValue.Length > 0){
        e.InputParameters["status"] = ParamValue;
    }
}

此外,在页面中创建将在控件中设置属性的公共(public)方法

public void SetParamValue(string Value){
    UserControl_2.ParamValue = Value;
}

从这里开始,在 linkbutton 的点击事件中,您可以使用页面的方法设置公共(public)属性:

  void OpenBtn1_Click(Object sender, EventArgs e){
     ((YourPageClassHere)this.Page).SetParamValue("Open");
  }

此方法将完成工作,但它将控件与链接按钮耦合到此特定页面。

如果你想移除耦合,那么你可以使用方法实现一个接口(interface)

public interface IParameterValuePage{
    public void SetParamValue(string Value)
}

然后在您的页面中实现它并检查控制页面的代码

  void OpenBtn1_Click(Object sender, EventArgs e){
      if (this.Page is IParameterValuePage){
          ((IParameterValuePage)this.Page).SetParamValue("Open");
      }
      else{
          throw new Exception("Page must implement IParameterValuePage");
      }
  }

关于ASP.Net 用户控件事件冒泡 (C#),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2186618/

相关文章:

c# - ASP.NET Request.ServerVariables 产生本地 IP 地址而不是远程 IP

javascript - 要再次显示该网页,Internet Explorer 需要重新发送

javascript - 信息模型更新时如何刷新 ASP.Net MVC 页面

c# - 如何在wpf中将名称设置为用户控件

javascript - 祖先的事件处理程序可以停止其子元素的事件之一的传播吗?

c# - 添加额外的命名空间会减慢网页速度吗?

.net - 如何从标准的非托管非 .NET 应用程序调用 C++/CLI (.NET) DLL?

wpf - 使用 XAML 进行面包屑导航控制

javascript - JS 中draw() 函数的事件冒泡

javascript - 防止滚动冒泡