2010-08-17 38 views
2

我正在爲網站評論系統,並在每次回發頁面上生成一個用戶控件(稱爲ucComment)用於數據庫中與此頁面相關的每個註釋。每個ucComment都有一個響應按鈕,允許您響應每個單獨的評論。解決ASP.NET 3.5控件ID生成:在後續回發中以不同順序創建控件時的回發事件

當我最終意識到每次創建新評論時,迴應按鈕都沒有做任何事情,下一次回發會偏移所有頁面的控件ID。換句話說,當我點擊ctl00_Content_ctl00_ctl01_ctl0 _lbtnRespond時,該控件實際上會在下一個回傳中生成爲ctl00_Content_ctl00_ctl01_ctl0 _lbtnRespond。所以與ctl07相關的事件根本就不會發生。

雖然在網絡上徘徊,我讀了關於覆蓋ClientID。我想如果我可以按照自己想要的方式命名控件,我可以繞過我的問題。 http://west-wind.com/Weblog/posts/4605.aspx 它看起來像一個偉大的黑客攻擊,但它不會觸發事件,因爲頁面上生成的ID和控制樹中如何表示ID之間的差異。

甚至還有誰從母版衍生更改控制樹的作品獲得上述的黑客攻擊,爲回發的工作方式一個傢伙: http://www.netquarry.com/index.php/2009/03/master-pages-ajax-and-javascript-10292/ 但我擔心可能有難言的反響。

我應該怎麼做才能讓我的評論系統工作,以便我可以回覆特定的評論,並且即使控件在該回發中被重命名,響應事件仍然會觸發?

回答

2

我是NetQuarry中處理MasterPage派生類的人。

我不知道你是否已經解決了你的問題。我當然可以理解你對我的MasterPage方法的擔憂。我擔心它也可能很脆弱。但是,現在在我們的平臺上構建的大約六種不同的Web應用程序中運行良好,大約一年半時間。這就是說,由於它們都建立在我們的平臺上,它們確實有一定的相似之處。當我們從.Net 2.0轉移到.Net 3.5時,代碼也繼續工作,沒有問題。

但是最近我們確實發現該方法不適用於UpdatePanels,並且無法糾正這種情況。在研究這個問題的同時,我發現.Net 4.0提供了比.NET 3.5更好的控制ClientID的功能,我懷疑用3.5來修復這種問題非常簡單。下面是斯科特·格思裏的好文章關於這一點:

http://weblogs.asp.net/scottgu/archive/2010/03/30/cleaner-html-markup-with-asp-net-4-web-forms-client-ids-vs-2010-and-net-4-0-series.aspx

編輯:剛剛發生,我認爲在這種情況下,您的問題可能通過基於一個唯一的ID簡單地呈現每個註釋響應按鈕來解決相關評論記錄的主鍵。這種方式回發每個現有按鈕的ID不會改變。

希望這是有幫助的。

凸輪

+0

哇,這是你!哈哈。謝謝你回到我身旁。實際上,我已經決定改變一切,轉向ASP.NET 4.0,並且在處理這個特定問題方面非常出色。我將我的ClientIDMode設置爲靜態,並使用您在編輯中提到的技術。我確實發現你的解決方案令人印象深刻,這一次它一直爲你工作真是太好了。感謝您的迴應 – HaterTot 2010-10-04 18:18:53

0

您有可能發佈用於生成用戶控件的服務器端代碼嗎?和承載他們的aspx頁面?

+0

我不認爲這會有所幫助,因爲我認爲這是一個高層次的問題,需要高層次的解決方案。客戶端ID生成問題是一個衆所周知的限制。爲了討論的目的,我要求您相信我沒有犯任何錯誤,並且我的代碼只會造成混淆。但隨時讓我知道,如果你不同意 – HaterTot 2010-08-17 21:49:15

+0

我問,因爲有很多可能的方式來實現你想達到的目標,而不能確定你如何建立整個事情,我真的不認爲這是可能的幫助 – 2010-08-18 10:00:18

相關問題