stringa dinamica incorporata in ascx
Domanda
Questo non esegue il delimitatore (viene visualizzato alla lettera nella finestra di conferma). Perchè no? Inoltre, quella variabile è impostata nel codebehind, ma è pronta quando viene chiamato PreRender, quindi dovrei essere OK, giusto?
<asp:LinkButton ... OnClientClick=
"return confirm('Are you sure you want to remove Contract
Period <%= ContractPeriod_N.Text %>?');" />
Soluzione
Prova a farlo nel codice dietro:
theLinkButton.OnClientClick =
"return confirm('Are you sure you want to remove Contract Period " +
Server.HtmlEncode(ContractPeriod_N.Text) + "?');";
Altri suggerimenti
Devi impostare la proprietà in modo che provenga da un blocco di rendering o completamente senza. Prova questo
<asp:LinkButton ... OnClientClick=
"<%= "return confirm('Are you sure you want to remove Contract
Period " + ContractPeriod_N.Text + "?');" %>" />
Ovviamente non viene eseguito. È nel mezzo di una stringa letterale. Cosa farebbe se volessi avere il <%
testo in una stringa da qualche parte?
Vedi la mia risposta ad una domanda diversa qui . Credo che tu possa realizzare ciò che desideri utilizzando un ExpressionBuilder personalizzato simile 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);
}
}
Il tuo markup sarebbe quindi simile:
<asp:LinkButton ... OnClientClick=
"return confirm('Are you sure you want to remove Contract
Period <%$ Code: ContractPeriod_N.Text %>?');" />
Se si utilizza il databinding, è possibile impostarlo in questo modo
<asp:LinkButton runat="server" Text="Hello" OnClientClick='<%# String.Format("return confirm(\"Are you sure you want to remove Contract Period {0}?\");", ContractPeriod_N.Text) %>' />