用户控件是否有可能以某种方式确定其“上下文”或其父.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或者其他什么,但我想知道最好的方法是什么。
简而言之,用户控件可以从声明它的页面获得某种“上下文”,还是有更好的方法来完成这类事情?谢谢。
- 用建议的方法编辑更新--------------------------
添加到UserControl的代码:
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>
答案 0 :(得分:3)
如果要遵循常见模式,请在.ascx控件(在代码隐藏中)公开一个公共属性,该控件允许包含页面以编程方式设置其状态。您可以创建一个State属性,其值是可用状态的枚举(只读,可编辑等)
答案 1 :(得分:1)
这与之前的问题类似。我的答案有一个链接显示如何做到这一点,以及一个更“标准”的替代方法
Can I get the currently opened ASP page file name in Visual Studio.NET in a custom control?
答案 2 :(得分:0)
是的,控件可以访问其上下文,例如使用Me.Page
(我希望这是在VB.NET中完成的方式)来访问页面。
这种方法的问题在于,它使您的控件不再可重用,因为它们只能在他们知道的上下文中工作。可能最好切换依赖项,即页面/父控件应调用控件的GetPageTitle()
方法,并使用返回值执行相应的操作。