Não é possível usar a seção Response.Write in da página ASPX?
-
21-09-2019 - |
Pergunta
Estou tentando usar o método Response.Write () para inserir dinamicamente o conteúdo na seção <head> de uma página ASPX. Preciso injetar um valor de string de uma propriedade em um objeto Code-Behind, que é um link para o meu arquivo CSS. No entanto, ele não está sendo processado corretamente no tempo de execução. O objeto é público na classe e é hidratado no evento Page_load (). No corpo da página, posso injetar com sucesso outras propriedades do objeto coroartion sem nenhum problema.
Por que isso não funciona na seção <head>?
Esta é a parte que não se expande corretamente:
<link href="<%= Corporation.PageStyleSheet %>" rel="stylesheet" type="text/css" />
Aqui está a seção inteira <head>:
<head runat="server">
<title></title>
<link href="<%= Corporation.PageStyleSheet %>" rel="stylesheet" type="text/css" />
<script language="JavaScript" type="text/JavaScript" src="cntv_menu.js"></script>
<script language="JavaScript" type="text/JavaScript" src="cntv_category.js"></script>
</head>
Qual é o motivo de isso não se expandir corretamente?
Solução
Você não pode usar <%= %>
dentro de a runat="server"
tag, que seu <head>
tag é.
Você pode mudar para <%# %>
e banco de dados no código-behind, ou você pode fazer a tag de link runat="server"
, dê um id
e atribua o atributo do código por trás.
Ver esta resposta, que entra nos detalhes.
Outras dicas
Usa isto:
this.myButton.Attributes.Add(attribute, value);
Funcionou para mim :)
A melhor maneira de resolver esse problema é usar Onprender
Exemplo:
Primeiro, defina sua tag:
<link href="~/css/your_default.css" type="text/css" runat="server" id="myCSS" />
E no Onprender:
protected override void OnPreRender(EventArgs e){
base.OnPreRender(e);
myCSS.Attributes["href"] = "~/css/your_new.css";
}
Se você escrever a linha completa, você deve ficar bem:
<%
Response.write("<link href=\"" + Corporation.PageStyleSheet + "\" rel=\"stylesheet\" />");
%>
PS Minha sintaxe pode não estar completamente certa, desculpe -me antecipadamente.