我目前工作的一個ASP.NET 3.5的項目,我想知道您對以下情況的意見,我正好碰上有時:上動態或不創建控件
比方說我」已經在我的代碼某處定義的虛組件框架的以下控制:
<Window runat="server" ID="windowTest" />
我們假設與上面提到的虛組件框架,它可以從客戶機獲得一個參考我的Window
控制SID e。使用其ID
(例如以改變其外觀):
function MyFunc(){
var win = GetWindow("windowTest");
}
讓我們還假設兩個代碼段被放置在不同的文件,例如MasterPage.Master中的JavaScript代碼和AnotherPage.aspx中的控件。
正如你可能已經注意到了,控制的ID
作爲一個硬編碼字符串到GetWindow
功能的傳球有點問題在這裏,因爲改變控制的ID
是要打破JavaScript函數。
這種情況肯定聞起來像它需要一個很好的ol'Replace Magic Number with Symbolic Constant重構。
AnotherPage.aspx:
Window windowTest = new Window();
windowTest.ID = Consts.ID_WINDOW_TEST;
form1.Controls.Add(windowTest);
MasterPage.Master:
function MyFunc(){
var win = GetWindow("<%= My.Namespace.Consts.ID_WINDOW_TEST %>")
}
我可以動態創建
Window
控制和使用常數控制的
ID
的價值實現這一目標
我現在的問題是:你如何處理這種情況?當您遇到這種情況時,您是否動態創建所有控件(如上面的示例中所示),並且使用此方法是否存在任何缺陷設計師不再顯示控件?或者你說「擰它,沒有人會改變該控制的ID」,並將其硬編碼在您的代碼?或者你有其他方法來處理這種情況?
我個人很喜歡第一個選項(重構),因爲a)它確保對ID
的更改不會破壞我的代碼,並且b)我幾乎從不使用Designer,但我想我會在SO上提出這個問題來獲得一些有價值的意見。
在此先感謝所有回覆。
問候,
的Glu
更新/澄清:
我通過,說明該代碼段被放置在同一個文件作出這一問題的第一個版本的一個小錯誤。由於控件和JavaScript方法都位於同一個文件中,因此不需要動態創建控件並使用常量定義控件的ID
;通過直接在.aspx
文件中定義控件,我可以在JavaScript方法中使用它的ID
,如下所示:GetWindow("<%= windowTest.ID %>");
但是,我的問題是另一個;控件和JavaScript方法都放置在不同的文件中,在這種情況下,使用控件的ID
的上述方法不再適用。因此,我將我的問題中提到的解決方案與控件的不斷創建和動態創建相結合。我現在糾正了我的問題中的兩個文件名,以便描述與我的問題相關的正確方案。
感謝您的意見。我查看了ASP.NET 4.0附帶的'ClientIDMode'屬性。有'Static'模式,看起來像我的問題的解決方案,因爲'ClientID'將與'ID'相同。然後,我可以寫'GetWindow(「<%= windowTest.ClientID%>」),一切都會正常工作。如果有人要更改ID,當然,它會在運行時崩潰。但是再一次,使用'ClientIDMode =「Static」'確實比硬編碼字符串更好。 – 2010-07-06 10:56:25
是的,我想它比硬編碼的字符串更好。 – 2010-07-06 11:30:46