Pergunta

É possível que um controle do usuário determine seu "contexto" ou sua página pai .aspx de alguma forma?

No momento, tenho um controle de usuário declarado em uma página .aspx típica da seguinte forma:

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

O controle do usuário atualmente emite uma caixa de texto da seguinte maneira:

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

O Page_load para este arquivo .ascx é atualmente assim:

Me.txtTitle.Text = SetPageTitle()

Enquanto alguns lugares neste aplicativo da web precisam disso (ou seja, uma caixa de texto em que o usuário final pode digitar um "título"), tenho outros lugares onde quero mostrar as informações "título" de uma maneira "somente leitura". Por exemplo, em vez de uma caixa de texto, eu poderia usar um controle de etiqueta ou uma caixa de texto com atividades ativadas = "false" para evitar a entrada de dados.

Suponho que poderia clonar esse pequeno arquivo .ascx e anexar um sufixo em seu nome como _ro.ascx ou algo assim, mas estou me perguntando qual seria a melhor abordagem.

Em resumo, um controle do usuário pode obter algum tipo de "contexto" da página que o declara ou existe uma maneira totalmente melhor de realizar esse tipo de coisa? Obrigada.

-Editar atualização com a abordagem sugerida ----------------------------

Código adicionado ao 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

Código adicionado ao pai que chama a UC:

<uc1:ManageTitle id="ManageTitle" 
    IsReadOnly="True" runat="server">
</uc1:ManageTitle>
Foi útil?

Solução

Se você deseja seguir padrões comuns, exponha uma propriedade pública no seu controle .ascx (no código de código) que permite que a página contendo definir seu estado programaticamente. Você pode criar uma propriedade estatal cujo valor é um enumeração de estados disponíveis (readonly, editável, etc)

Outras dicas

Isso é semelhante a uma pergunta anterior. Minha resposta tem um link mostrando como isso pode ser feito, bem como uma abordagem alternativa que é mais "padrão"

Posso obter o nome do arquivo da página ASP atualmente aberto no Visual Studio.net em um controle personalizado?

Sim, um controle pode acessar seu contexto, por exemplo, usando Me.Page (Espero que seja assim que é feito no vb.net) para acessar a página.

O problema com essa abordagem é que torna seus controles menos reutilizáveis, porque eles só funcionarão em contextos que conhecem. Provavelmente seria melhor mudar a dependência, ou seja, o controle da página/pai deve chamar um GetPageTitle() Método do seu controle e faça as coisas apropriadas com o valor de retorno.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top