用户控件是否可以通过某种方式确定其“上下文”或其父 .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"/>
此 .ascx 文件的 page_load 当前如下所示:
Me.txtTitle.Text = SetPageTitle()
虽然这个网络应用程序中的某些地方需要这个(即最终用户可以输入“标题”的文本框),但我还有其他地方我想以“只读”方式显示“标题”信息。例如,而不是文本框,我可以使用标签控件或 Enabled="false" 的文本框来防止数据输入。
我想我可以克隆这个小的 .ascx 文件并在其名称后附加一个后缀,例如 _RO.ascx 之类的,但我想知道最好的方法是什么。
简而言之,用户控件是否可以从声明它的页面中获取某种“上下文”,或者是否有更好的方法来完成这种事情?谢谢你。
-- 使用建议的方法编辑更新 --------------
添加到用户控件的代码:
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>