Como posso fazer o meu controle de servidor ASP.NET ter um bloco de código incorporado como um valor de propriedade?

StackOverflow https://stackoverflow.com/questions/387167

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.

Foi útil?

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.

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