以编程方式触发ASP.NET控件事件的正确方法是什么?

时间:2009-08-12 22:54:34

标签: c# asp.net events

以编程方式触发ASP.NET控件事件的正确方法是什么? 我正在寻找重构一些代码,我看到代码后面的代码如下所示;开发人员正在调用事件处理程序并使用params使其饱和。 对于DropDownList

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

&安培; 对于RadioButtonList

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

这是正常的编码练习吗?我该怎么办才能不破坏/破坏页面? 任何想法或建议将不胜感激。

谢谢, 〜在圣地亚哥

2 个答案:

答案 0 :(得分: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();
}

答案 1 :(得分:0)

请注意,您以编程方式调用事件 handler ,而不是事件。

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

更好的做法是重构需要共享的代码,并将其放在私有方法中,并让两个事件处理程序都使用它,传入来自发送方的任何数据或它所需的事件标记。 / p>