2017-05-25 63 views
2

多多包涵,第一次與用戶控件,這是一個大的應用程序,我繼承了...傳遞參數到用戶控件從母版頁

我有一個母版頁的用戶控件。這樣可行。除了一個有條件的CSS類外,我需要重用約99%的內容。我的想法是關閉ID並返回正確的課程。

的.ascx:

<div class="<%= GetMyClass() %>">Changes colors!</div> 

.ascx.cx:

public string GetMyClass(){ 
    if (ID == "FirstId"){ 
     return "first-class"; 
    } 
    if (ID == "SecondId"){ 
     return "second-class"; 
    } 
    return ""; 
} 

的.master:

<slc:MyUsercontrol runat="server" ID="FirstId" /> 
... stuff 
<slc:MyUsercontrol runat="server" ID="SecondId" /> 

兩件事情發生在這裏。

首先,我在用戶控件的代碼隱藏中有一個斷點,它只會斷開一次,我希望它斷裂兩次。

其次,代碼隱藏中可用的ID不是傳遞到頁面的「ID」。如果我將「FirstId」更改爲「Slamalamadingdong」,則它在代碼隱藏時仍然是「FirstId」,當它碰到我的斷點時。

請注意,我在繼承項目時設置了「FirstId」,我添加了「SecondId」標記,所以我認爲這個值實際上是在其他地方完全設置的,並且標記值與我們得到的不相關到代碼隱藏。

我完全脫離了基礎,我試圖把這個關掉?

+0

您是否重新編譯該項目或在進行更改後在瀏覽器中重新加載頁面? – Maxx

+0

@Maxx重新編譯 –

回答

2

將參數傳遞到用戶控件,而不是依賴於ID露出用於該用戶控件的新屬性爲這樣:

.ascx.cx:

public string MyClass { get; set; } 

的.ascx:

<div class="<%= MyClass %>">Changes colors!</div> 

的.master:

<slc:MyUsercontrol runat="server" ID="FirstId" MyClass="first-class" /> 

<slc:MyUsercontrol runat="server" ID="SecondId" MyClass="second-class" /> 

這是一個更通用的方法,因爲您可以簡單地添加其他MyUsercontrol元素以及自己的行爲,而無需更改MyUsercontrol的邏輯。將UserControl邏輯與父母的ID耦合也不是一個好主意。