Como posso fazer o meu controle de servidor ASP.NET ter um bloco de código incorporado como um valor de propriedade?
-
23-08-2019 - |
Pergunta
Eu tenho um controle de servidor personalizado com uma propriedade do título. Ao usar o controle, eu gostaria de definir o valor do título na página aspx assim:
<cc1:customControl runat="server" Title='<%= PagePropertyValue%>' >
more content
</cc1:customControl>
Quando eu fizer isso, no entanto, estou recebendo exatamente a string <% = PagePropertyValue%> que está sendo exibido em vez do valor de propriedade que eu gostaria de ver.
Assim, depois de tentar a expressão de ligação de dados (como sugerido abaixo). Eu não entendo o literal string que parecia ruim, mas eu não obter qualquer outra coisa qualquer.
<cc1:customControl runat="server" Title='<%# PagePropertyValue%>' >
more content
</cc1:customControl>
O que eu preciso fazer para meu controle personalizado para tomar este tipo de valor? Ou há algo que eu preciso fazer para a página.
Solução
Você não pode. <% =%> Irá escrever a string diretamente para a resposta-stream, que acontece após o controle de servidor é construído. Consulte este post por uma explicação.
Assim, sua ou codebehind, ou <% # + ligação de dados como Zachary sugere.
Outras dicas
Como uma continuação à minha própria pergunta, eu descobri que o que eu realmente queria era usar ASP.NET Expressões usando o <% $ sintaxe, pois o que eu queria fazer era colocar em conteúdo localizado.
Isto pode ser feito com aparentemente nenhum extra manipulação no lado do controle de servidor.
<cc1:customControl runat="server" Title='<%$ Resouces: ResourceFile, ContentKey %>' >
more content and controls
</cc1:customControl>
Isso funciona muito bem.
Tente usar sintaxe de ligação de dados:
<%# PagePropertyValue %>
Para o valor da propriedade se ligam a trabalho corretamente como sugerido, você terá esta no arquivo aspx ou ascx:
<cc1:customControl runat="server" Title='<%# PagePropertyValue %>' >
more content
</cc1:customControl>
Em seguida, terá de dados realmente se ligam em sua página wich você tem que adicionar isso em seu código por trás do arquivo (código em C #)
protected void Page_Load(object sender, EventArgs e)
{
DataBind();
}
Dessa forma, ele vai ligar os dados em seu arquivo ascx ou aspx.
Note que este é específico para atributos de controle. Ao usar o <% = sintaxe controle externo atributos que significa em qualquer outro lugar na página a sintaxe funciona como esperado. Então, é isso <% = GetCapitalUserName ()%> chamaria o método correto e injetar o resultado da chamada na página.