避免在每次回发时加载菜单的正确方法?

问题描述 投票:0回答:1

我有以下问题: 我正在开发的网站(网络表单)中有一个很大的菜单,其中有很多条目。它位于母版页中。 加载服务器端需要相当长的时间(取决于用户对各种项目的权限),对于普通用户来说大约有 250kB 的数据。

现在每次回发都会重复此过程。我想最小化服务器上的负载并避免所有数据传输(即使视图状态被压缩,这会有所帮助)。

因为菜单在 99.9% 的情况下对于给定用户来说是完全相同的(只有在管理员授予另一个权限时才会改变),所以我考虑一劳永逸地为 sessionStart 上的菜单创建 HTML,存储生成的html 客户端(例如在 sessionStorage 中)并从那里重新吐出它。

但是我遇到了一个严重的问题:我在那里的所有链接都使用“javascript:__doPostBack()”调用作为 href,而我的页面不允许这样做(毕竟页面不是这些控件),并且我不会禁用 pageEventValidation。

所以也许该菜单的架构有问题......

你有什么想法吗?

javascript c# asp.net webforms menu
1个回答
0
投票

要优化 WebForms 应用程序中的菜单,同时维护事件验证和回发,您可以按照以下步骤操作:

  1. 在服务器上生成结构化菜单数据,包括菜单项及其关联的事件目标。

  2. 页面加载时使用 AJAX 在客户端加载此菜单数据。

  3. 通过为每个菜单项创建锚元素 (

    <a>
    ) 并向其附加单击事件处理程序,在客户端动态渲染菜单。

  4. 在单击事件处理程序中,使用 JavaScript 根据关联目标处理菜单项单击。

  5. 对于回发,使用

    __doPostBack
    函数和适当的参数来模拟它们以维护事件验证。

function handleMenuItemClick(target) {
    // Simulate a postback
    __doPostBack(target, ''); // Target is the client ID of the control
}

此方法允许在客户端呈现菜单、有效处理菜单项单击以及保留事件验证和回发功能。您可以选择在客户端缓存数据。 如果对你有用请点赞

© www.soinside.com 2019 - 2024. All rights reserved.