0

我开始对这个发疯了,“似乎”我不能让它以一种优雅的方式工作,我相信我应该能够做到。

在页面的右侧,我动态创建了自定义服务器控件,其中包含触发的事件,我已经证明这一点在测试中有效。

我在页面左侧有一个 Treeview,假设它不是回发,它会在页面加载时自动填充,如果是,那么它的视图状态可以很好地处理这个问题。当您单击树的其中一个分支时,它将回发,当事件触发时,它将使用新的自定义服务器控件填充右侧,这些控件包含与您单击的分支相关的信息。右侧面板始终填充正确的控件,但是当它们被单击时不会触发事件,因为新分支 ID 仅在 page_load 事件(当 treeview 事件触发时)之后才知道,这对于所有事件的聪明来说都太迟了注册我想。

我已经研究过使用 Response.Redirect,但后来我失去了 Treeview 上的视图状态,因此开始考虑强制回发 Javascript,但还没有走得太远。

我真的不敢相信这是一个不寻常的问题,所以希望有一个优雅的解决方案。如果它只是我正在以完全错误的方式去做,那么如果我们能让它工作,我很乐意改变所有的逻辑!

非常感谢!!

马特

*更新* *

我还不允许关闭它,所以将粘贴在下面

似乎把它打出来让我想到了 Javascript 路由以及 .NET 在哪里必须有什么。一点阅读,我想出了这个。

PostBackOptions pbo = new PostBackOptions(pnlEvents); pbo.ActionUrl = Request.Url.AbsoluteUri; pbo.PerformValidation = false; string postback = ClientScript.GetPostBackEventReference(pbo); ClientScript.RegisterStartupScript(typeof(Page), "AutoPostBackScript", postback, true);

如果您在从中获取信息的事件触发后运行此程序,这将导致另一个回发,只要您将值存储在视图状态或其另一个控件视图状态中,您就可以加载服​​务器控件 forn Init 或 Load。

4

1 回答 1

0

可以在 Page_Init 或 Page_Load 中注册事件。如果您仍然迷路,请查看MSDN 上的 ASP.NET 页面生命周期概述

更新: 您可以简单地在 URL 中发送参数,然后在 Page_Load 中获取它,根本不使用回发机制。

于 2012-07-30T19:44:31.340 回答