2010-03-08 81 views
1

用戶控件是否可以通過某種方式確定其「上下文」或其父級.aspx頁面?ASP.NET用戶控件可以確定其上下文或其父級.aspx文件

現在我有一個典型的.aspx頁面上聲明的用戶控件,如下所示:

<%@ Register TagPrefix="uc1" TagName="ManageTitle" Src="../UserControls/ManageTitle.ascx" %> 

用戶控件目前發出一個文本框,如下所示:

<asp:textbox id="txtTitle" runat="server" MaxLength="60" 
ToolTip="Describe the item with a short pithy title - most important keywords first"/> 

在Page_Load爲這個.ascx文件目前是這樣的:

Me.txtTitle.Text = SetPageTitle() 

雖然這個網絡中的一些地方應用需要這個(即最終用戶可以輸入「標題」的文本框),我還有其他地方想以「只讀」方式顯示「標題」信息。例如,我可以使用帶有Enabled =「false」的標籤控件或文本框來避免 數據輸入,而不是文本框。

我想我可以克隆這個小的.ascx文件並附加一個後綴名稱,如_RO.ascx或其他,但我想知道最好的方法是什麼。

簡而言之,用戶控件可以從聲明它的頁面獲得某種「上下文」,還是有更好的方法來完成這種事情?謝謝。

- 與進近EDIT UPDATE擬議--------------------------

代碼添加到該用戶控件:

Private mIsReadOnly As Boolean 

Public Property IsReadOnly() As Boolean 
    Get 
     IsReadOnly = mIsReadOnly 
    End Get 
    Set(ByVal value As Boolean) 
     mIsReadOnly = value 
    End Set 
End Property 
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    If Page.IsPostBack Then 
     'Leave the textbox alone 
    Else 
     Me.txtTitle.Text = SetPageTitle()  'This is the original code 
     If IsReadOnly Then 
      Me.txtTitle.Enabled = False 
     Else 
      Me.txtTitle.Enabled = True 
     End If 
    End If 
End Sub 

代碼加入到調用UC父:

<uc1:ManageTitle id="ManageTitle" 
    IsReadOnly="True" runat="server"> 
</uc1:ManageTitle> 

回答

3

如果要遵循共同的模式,在您的.ascx控制公開公共屬性(在代碼隱藏中),它允許包含頁面以編程方式設置其狀態。您可以創建一個State屬性,其值爲可用狀態的枚舉(只讀,可編輯等)。

+0

這就好像我在我之前的回答中提到的「更標準」的方法(用例子)。在我以前的答案。但我會給你投票,因爲我同意你的方法100%。 – David 2010-03-08 23:20:08

+0

謝謝大衛和戴夫。我編輯了這個問題,把我對你的建議的看法合併在一起,這些建議很好用。 – 2010-03-12 20:45:37

0

是的,控件可以訪問其上下文,例如,使用Me.Page(我希望這是如何在VB.NET中完成的)訪問頁面。

這種方法的問題是,它使得控件的可重用性較差,因爲它們只能在他們知道的上下文中工作。可能最好是切換依賴關係,即頁面/父級控件應該調用您的控件的GetPageTitle()方法,並使用返回值執行適當的操作。

相關問題