【问题标题】:How to raise an event without the full postback?如何在没有完整回发的情况下引发事件?
【发布时间】:2012-02-07 15:20:43
【问题描述】:

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

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

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

谢谢!

(asp.net 4.0, C#)

【问题讨论】:

  • 所以你不想在服务器端处理事件,你也不想用Javascript来处理它?嗯,我不确定还有其他选择。除非我误解了你的问题。
  • 我想在服务器端处理事件。我只是不想做一个完整的回发

标签: c# asp.net


【解决方案1】:

很遗憾,使用 UpdatePanel 会导致完整的回发。因此,如果您不想这样做,则必须使用客户端 JavaScript。

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

【讨论】:

    【解决方案2】:

    您可以将代码添加到 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 值,那么请测试上面的这 2 个属性。此外,显然,您可以将该条件更改为相反的意思,以便您可以将完整的主体代码包装在该 IF 块中(如果这是您喜欢的,或者您不喜欢在一个方法中使用多个 return 语句)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-11-30
      • 2011-03-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-11
      • 2011-08-09
      • 1970-01-01
      相关资源
      最近更新 更多