2009-08-12 145 views
1

以编程方式触发ASP.NET控件事件的正确方法是什么? 我正在寻找重构一个小代码,我看到代码背后的代码洒在这样的代码;开发人员正在调用事件处理程序并使用params进行饱和处理。 为一个DropDownList以编程方式触发ASP.NET控件事件的正确方法是什么?

ddlAddress.SelectedIndex = 1; 
ddlAddress_SelectedIndexChanged(null, new EventArgs()); 

& 了RadioButtonList的

rblAction.SelectedIndex = 0; 
rblActionType_SelectedIndexChanged(null, new EventArgs()); 

这是正常的编码实践?我应该怎么做才能不破坏/破坏页面? 任何想法或建议,将不胜感激。

感谢, 〜CK在圣地亚哥

回答

5

我会通过删除所有来自实际事件的方法的代码的开始,并重构为一个名为AddressChanged或任何其他适合你的命名标准新方法。然后,您可以从代码中的任何其他位置调用该新函数。

protected void ddlAddress_SelectedIndexChanged(object sender, EventArgs e){ 
    AddressChanged(); 
} 
private void AddressChanged(){ 
    //do the changed event 
} 

private void doingSomething(){ 
    ddlAddress.SelectedIndex = 1; 
    AddressChanged(); 
} 
+0

+1这比我的写得好得多。做得很好! – 2009-08-12 23:08:24

+0

@安德鲁:哈哈,谢谢... – RSolberg 2009-08-13 00:22:00

0

需要注意的是,我们在调用事件处理编程,而不是事件。

这可能表示设计问题,因为通常情况下,事件处理程序不应该依赖于彼此以特定顺序执行。然而,我已经看到了这种模式,甚至偶尔使用它,当一个事件处理程序中存在的代码需要在另一个事件处理程序中执行并且当时不能重构。您可以设置“发件人”来表明它来自代码中的其他地方,而不是来自期望的控件本身,但这被称为好设计有点太不透明。

重构需要共享的代码并将其放在私有方法中,并让两个事件处理程序都使用它,从发件人或它需要的事件中传递任何数据将是更好的做法。

相关问题