我有以下问题: 我正在开发的网站(网络表单)中有一个很大的菜单,其中有很多条目。它位于母版页中。 加载服务器端需要相当长的时间(取决于用户对各种项目的权限),对于普通用户来说大约有 250kB 的数据。
现在每次回发都会重复此过程。我想最小化服务器上的负载并避免所有数据传输(即使视图状态被压缩,这会有所帮助)。
因为菜单在 99.9% 的情况下对于给定用户来说是完全相同的(只有在管理员授予另一个权限时才会改变),所以我考虑一劳永逸地为 sessionStart 上的菜单创建 HTML,存储生成的html 客户端(例如在 sessionStorage 中)并从那里重新吐出它。
但是我遇到了一个严重的问题:我在那里的所有链接都使用“javascript:__doPostBack()”调用作为 href,而我的页面不允许这样做(毕竟页面不是这些控件),并且我不会禁用 pageEventValidation。
所以也许该菜单的架构有问题......
你有什么想法吗?
要优化 WebForms 应用程序中的菜单,同时维护事件验证和回发,您可以按照以下步骤操作:
在服务器上生成结构化菜单数据,包括菜单项及其关联的事件目标。
页面加载时使用 AJAX 在客户端加载此菜单数据。
通过为每个菜单项创建锚元素 (
<a>
) 并向其附加单击事件处理程序,在客户端动态渲染菜单。
在单击事件处理程序中,使用 JavaScript 根据关联目标处理菜单项单击。
对于回发,使用
__doPostBack
函数和适当的参数来模拟它们以维护事件验证。
function handleMenuItemClick(target) {
// Simulate a postback
__doPostBack(target, ''); // Target is the client ID of the control
}
此方法允许在客户端呈现菜单、有效处理菜单项单击以及保留事件验证和回发功能。您可以选择在客户端缓存数据。 如果对你有用请点赞