2010-03-08 78 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()方法,并使用返回值执行适当的操作。

相关问题