如何在没有完全回发的情况下引发事件

本文关键字:情况下 事件 | 更新日期: 2023-09-27 18:23:44

我在UpdatePanel中有两个控件;一个复选框和一个时间选择器。

当我单击复选框(事件CheckedChanged)时,它应该使时间选择器可编辑(ReadOnly=false),反之亦然。我希望在不进行完全回发的情况下引发CheckedChanged事件。

有没有一个不使用javascript的变通方法?我不太清楚UpdatePanel上的触发器是如何管理的。

谢谢!

(asp.net 4.0,C#)

如何在没有完全回发的情况下引发事件

不幸的是,使用UpdatePanel将导致完全回发。因此,如果你不想这样,你就必须使用客户端JavaScript。

它不是很复杂。找一个能为你编写JavaScript的人,这不是火箭科学。

您可以向OnInit和OnLoad添加代码,通过检查Request.IsPostback以及是否是特定控件导致的(回发)来跳过执行它们所包含的代码;例如:

<asp:CheckBox runat="server" ID="MyCheckbox" AutoPostBack="true" />

if(this.Request.IsPostback && this.Request.Form["__EVENTTARGET"] == this.MyCheckbox.ID)
{
    return;
}

因为我没有测试这一点,如果你的复选框嵌套在其他控件中,这会导致它的ClientID和UniqueID是前置的父控件的ID值,那么测试上面的两个属性。此外,很明显,您可以将该条件更改为相反的意思,这样您就可以将完整的主体代码封装在IF块中(如果您喜欢这样,或者如果您不喜欢在一个方法中使用多个返回语句)。

我希望我能很好地理解——这将节省一些处理时间;然而,它可能会产生负面的副作用(例如,如果您的代码在服务器上的init/load方法中动态地将控件添加到控制树中,那么您确实希望这些控件始终执行,即使在这种情况下也是如此;否则,这些dyn控件的视图状态将变为无效)。