cadena dinámica en línea en ascx
Pregunta
Esto no ejecuta el delimitador (se muestra textualmente en el diálogo de confirmación). Por qué no? Además, esa variable se establece en el código subyacente, pero está lista para cuando se llame a PreRender, así que debería estar bien, ¿no?
<asp:LinkButton ... OnClientClick=
"return confirm('Are you sure you want to remove Contract
Period <%= ContractPeriod_N.Text %>?');" />
Solución
Intenta hacerlo en el código detrás:
theLinkButton.OnClientClick =
"return confirm('Are you sure you want to remove Contract Period " +
Server.HtmlEncode(ContractPeriod_N.Text) + "?');";
Otros consejos
Debe configurar la propiedad para que sea todo desde un bloque de renderizado o completamente sin ella. Pruébalo
<asp:LinkButton ... OnClientClick=
"<%= "return confirm('Are you sure you want to remove Contract
Period " + ContractPeriod_N.Text + "?');" %>" />
Por supuesto que no se ejecuta. Está en el medio de una cadena literal. ¿Qué haría si quisiera tener el <%
texto en una cadena en alguna parte?
Vea mi respuesta a una pregunta diferente aquí . Creo que puede lograr lo que quiere con un ExpressionBuilder personalizado similar a
/// <summary>
/// An Expression Builder for inserting raw code elements into ASP.NET markup.
/// Code obtained from: http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx
/// </summary>
[ExpressionPrefix("Code")]
public class CodeExpressionBuilder : ExpressionBuilder
{
/// <summary>
/// Inserts the evaluated code directly into the markup.
/// </summary>
/// <param name="entry">Provides information about the expression and where it was applied.</param>
/// <param name="parsedData">Unused parameter.</param>
/// <param name="context">Unused paramter.</param>
/// <returns>A <see cref="CodeExpression"/>.</returns>
public override CodeExpression GetCodeExpression(BoundPropertyEntry entry, object parsedData, ExpressionBuilderContext context)
{
return new CodeSnippetExpression(entry.Expression);
}
}
Su marcado se vería así:
<asp:LinkButton ... OnClientClick=
"return confirm('Are you sure you want to remove Contract
Period <%$ Code: ContractPeriod_N.Text %>?');" />
Si está utilizando enlace de datos, puede configurarlo de esta manera
<asp:LinkButton runat="server" Text="Hello" OnClientClick='<%# String.Format("return confirm(\"Are you sure you want to remove Contract Period {0}?\");", ContractPeriod_N.Text) %>' />