【问题标题】:ASP Update PanelASP 更新面板
【发布时间】:2013-11-27 13:07:50
【问题描述】:

我实现了一个更新面板,里面有一个treeview控件。树视图控件将导致 通过 Javascript 回发,从而触发 OnNodeChecked

我已将它封装在一个 UpdatePanel 控件中,但我的页面上仍然有闪烁效果。我还在页面中实现了一个 scriptManager。有谁知道我可以做些什么来避免闪烁?

<asp:UpdatePanel ID="updateTreeViewPanel" runat="server" 
                 ChildrenAsTriggers="true" UpdateMode="Conditional">
   <ContentTemplate>
     <fieldset>
        <asp:TreeView ID="tv_WLG" runat="server"  
                      OnTreeNodeCheckChanged="tv_WLG_TreeNodeCheckChanged" 
                      OnSelectedNodeChanged="tv_WLG_SelectedNodeChanged" 
                      onclick="javascript:postBackByObject(event)"  
                      ShowCheckBoxes="All">
        </asp:TreeView>
    </fieldset>
  </ContentTemplate>
</asp:UpdatePanel>

【问题讨论】:

  • 为什么你用javascript而不是代码隐藏来处理点击事件?我怀疑这可能是问题所在。
  • @Ethan,js 触发回发,触发后面的代码。应该设置 Treeview 控件中的哪个属性来触发后面的代码?
  • 您是在触发随机回发,还是真的希望发生某些事情?
  • 当父节点被选中时,所有子节点都被选中,这就是回发处理的。
  • 回发后您使用什么服务器端事件来处理此问题?

标签: asp.net


【解决方案1】:

我建议添加一个触发器...

<asp:UpdatePanel>
    <ContentTemplate>
        ...your existing code
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="tv_WLG" />
    </Triggers>
</asp:UpdatePanel>

但是,您所定位的客户端脚本可能会出现在更新面板的范围之外。您可以尝试在代码隐藏中处理您的点击事件。

【讨论】:

  • ChildrenAsTriggers="true" 不会消除显式触发器的需要吗?
  • 在去掉 ChildrenAsTriggers 后仍然得到回发。
  • 在你的 JS 中,尝试运行一些 jquery 来选择触发事件的节点的子节点。 api.jquery.com/children 如果您需要帮助来获取这些孩子,请告诉我。这应该消除回发的需要,从而解决闪烁问题。
【解决方案2】:

您可以做的是向更新面板添加一个onload 事件,并像这样使用__doPostback() 触发该事件。然后,每当点击事件触发时,您都可以在更新面板的 onload 事件中处理它

<asp:UpdatePanel ID="updateTreeViewPanel" runat="server" 
                 ChildrenAsTriggers="true" OnLoad="UpdatePanel_Load" UpdateMode="Conditional">
   <ContentTemplate>
     <fieldset>
        <asp:TreeView ID="tv_WLG" runat="server"  
                      OnTreeNodeCheckChanged="tv_WLG_TreeNodeCheckChanged" 
                      OnSelectedNodeChanged="tv_WLG_SelectedNodeChanged" 
                      onclick="__doPostback('updateTreeViewPanel', '');"  
                      ShowCheckBoxes="All">
        </asp:TreeView>
    </fieldset>
  </ContentTemplate>
</asp:UpdatePanel>

您当前的方法不起作用的原因是回发对象需要是更新面板正在处理的对象。使用更新面板作为对象调用doPostback() 将触发部分回发。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多