簡體   English   中英

在ASP.NET頁面生命周期與自定義服務器控件的問題和事件

[英]Issues with Custom Server Controls and Events in the ASP.NET page lifecycle

我開始對此很不滿意,它“似乎”無法以一種優雅的方式工作,而且我確定我應該能夠做到。

在頁面的右側,我動態創建了其中觸發事件的Custom Server控件,我證明了這一點在測試中是可行的。

我在頁面的左側有一個Treeview,假設它不是回發頁面,那么它將在頁面加載時自動填充,如果是的話,則其viewstate可以很好地處理它。 當您單擊樹的其中一個分支時,它將回發,並且在事件觸發時,它將在右側填充新的自定義服務器控件,這些控件保存與您單擊的分支有關的信息。 右側面板始終使用正確的控件填充,但是單擊事件時不會觸發事件,因為僅在page_load事件(當樹視圖事件觸發時)之后才知道新的分支ID,這對於所有事件的智能化來說都太晚了我想注冊。

我已經研究過使用Response.Redirect,但是隨后我失去了Treeview上的viewstate,因此開始考慮強制返回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);

如果在事件觸發后從您獲取信息后運行此命令,則將導致另一次回發,只要您將值存儲在viewstate或其另一個控件的viewstate中,就可以加載Server Controls forn Init或Load。

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

更新:您可以簡單地在URL中發送參數,並在Page_Load中獲取它,而不使用回發機制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM