我有一个 UserControl A,其中包含
- 下拉菜单
- 占位符
在运行时,占位符将填充一些 UserControl B。
有时我需要在下拉列表中捕获 javascript onchange 事件,以调用 B 中的 javacript 函数(以对 B 进行客户端更新)。如何做到这一点的良好设计/实践是什么?
最简单的方法是让 asp:dropdownlist 成为公共(public)成员,然后将其发送到 B: 的公共(public)方法中
// In controlling code
...
userControlB.Initialize(userControlA.TheDropDownList);
...
// In usercontrol B
public void Initialize(DropDownList dropdownFromA)
{
dropdownFromA.Attributes.Add("onchange", "myBfunction()");
}
但是这种方法有点不好闻。我希望 A 和 B 尽可能保持松散耦合。还有更好的想法吗?
最佳答案
为了让它们真正解耦,您可以引入观察者模式,如描述的 here 。我会让下拉注册它自己的更改事件,这将通知观察者发生了更改。然后,如果客户端上的任何其他控件感兴趣,他们将在进行特定观察时获得通知。
编辑
你可以根据观察的逻辑名称来命名变量,然后你只需在注册之前检查以确保观察者存在。
我见过使用的不同系统,更像是一个事件调度程序,本质上,当您订阅时,您提供事件的名称,然后您触发时,您将包含两个参数:事件的名称和事件的数据事件。在此模型中,页面上只有一个调度程序。
关于asp.net - ASP.NET Web 控件之间的 Javascript 交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1137052/