我开始对这个发疯了,“似乎”我不能让它以一种优雅的方式工作,我相信我应该能够做到。
在页面的右侧,我动态创建了自定义服务器控件,其中包含触发的事件,我已经证明这一点在测试中有效。
我在页面左侧有一个 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。