2010-06-10 3 views
8

Hinweis: Wahrscheinlich wird dies eine doppelte Frage sein, aber da ich keine klare Antwort gefunden habe, frage ich es trotzdem.ASP.NET einfache Anführungszeichen werden konvertiert in '

In ASP.NET möchte ich ein wenig JavaScript zum onclick-Ereignis einer CheckBox hinzufügen. Ich habe den Fall an das vereinfacht:

<asp:CheckBox ID="TestCheckBox" runat="server" onclick="alert('test');" Text="Test" /> 

Der resultierende HTML ist wie folgt:

<input id="MainContainer_TestCheckBox" type="checkbox" name="ctl00$MainContainer$TestCheckBox" onclick="alert(&#39;test&#39;);" /><label for="MainContainer_TestCheckBox">Test</label> 

Was mich besonders stört ist, dass ein Apostroph ‚automatisch‘ umgewandelt wird in '& # 39; ". Wenn ich den onclick im Markup weglasse und ihn in Page_Load zuweise, werden genau dieselben Resultate im HTML angezeigt.

protected void Page_Load(object sender, EventArgs e) 
{ 
    this.TestCheckBox.Attributes["onclick"] = "alert('test');"; 
} 

Wer hat eine Ahnung, was passiert? Oder wie man es repariert/vermeidet?

+2

Warum ist das wichtig? Sie sind nicht notwendig, aber es ist gültiges HTML und funktioniert gut. –

Antwort

1

Falls jemand findet sonst diese Frage, ist dies der Weg ist, ich in der Lage war Attribute von einem benutzerdefinierten Steuerelement zu injizieren, ohne die Werte mit codierten HTML. Dies ist ein Beispiel für eine Schaltfläche, die zu einer asynchronen Funktion aufruft, um eine Tastenbetätigungsaktion zu bestätigen.

Der Schlüssel ist, die writer.AddAttribute() zu verwenden, die das Flag hat, um den HTMLEncode-Schritt zu deaktivieren. Dies scheint auch davon abhängig zu sein, welche Version von asp.net Sie verwenden. das funktioniert in .net 4.6.1

public class ConfirmationLinkButton : LinkButton 
{ 
    protected override void AddAttributesToRender(HtmlTextWriter writer) 
    { 
     base.AddAttributesToRender(writer); 
     string script = "confirmAsync('" + ConfirmationMessage.Replace("'", "\\'") + "', " + Callback() + ");" + 
         "return false;"; 
     writer.AddAttribute(HtmlTextWriterAttribute.Onclick, script, false); 
    } 

    private string Callback() 
    { 
     return "(data) => { if (data===true) {" + Page.ClientScript.GetPostBackEventReference(this, "") + "}}"; 
    } 

    public string ConfirmationMessage { get; set; } 
} 
1

Zunächst das Kontrollkästchen asp Steuerelement aktiviert nicht als gültiges Attribut.

So kann man zwei Dinge tun:

1- Wenn Sie den Wert Server-Seite nicht benötigen, können Sie nur einen normalen Kontrollkästchen anstelle der asp Kontrollkästchen setzen.

2- Wenn Sie die Wert-Server-Seite benötigen, fügen Sie das runat = "server" -Attribut hinzu und platzieren Sie und ID auf Ihr Kontrollkästchen, damit Sie in Ihrem Code darauf verweisen können.

7

Wir hatten das gleiche Problem mit einfachen Anführungszeichen in Attributwerten, als wir ein Projekt von .NET 3.5 nach .NET 4.0 migrierten. Es konvertiert alle einfachen Anführungszeichen in Attributwerten in &39;. Also gingen wir zurück zu .NET 3.5.

Es ist eine .NET 4.0 Sache. Sie können mehr über dieses Problem here lesen.

+0

Danke! Das klärt es ein bisschen mehr. –

0

Ich stieß vor kurzem auf diese, wo ein Steuerelement aktualisiert wurde, nachdem die Datenindikation stattgefunden hatte. Das Update war das Onchange Javascript während des OnItemDataBound Server Ereignis für den Repeater hinzufügen beteiligt: ​​

protected void rptTarifDetails_ItemDataBound(object sender, RepeaterItemEventArgs e) 
{ 
    if (e.Item.ItemType == ListItemType.Item) 
    { TextBox proposedPrice = e.Item.FindControl("txtProposedUnitSell") as TextBox; 
     proposedPrice.Attributes.Add("onchange", "CalcCommissionSingleLine(this,'None','" + ((Repeater)sender).ClientID + "', false, " + rowCount.Value + ")"); 
0

ich gleiche Problem gegenüber. Ich habe viel gesucht und schließlich habe ich es gelöst, indem ich den Inhaltstyp der Seite in application/xhtml + xm geändert habe.

<%@ Page Language="C#" AutoEventWireup="true" EnableViewState="true" Debug="true" ContentType="application/xhtml+xm" %> 

Hope, Diese Informationen werden Ihnen helfen ..