Одиночные кавычки ASP.NET преобразуются в '

Примечание. Скорее всего, это будет двойной вопрос, но поскольку я не нашел четкого ответа, я все равно прошу его.

В ASP.NET я хотел бы добавить JavaScript в событие onclick для CheckBox. Я упростил это дело:

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

Итоговый HTML выглядит следующим образом:

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

Что особенно меня беспокоит, так это то, что одна цитата "автоматически" преобразуется в "& # 39;". Если я опустил onclick в разметке и назначил ее в Page_Load, то те же самые результаты отображаются в HTML.

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

Кто-нибудь понял, что происходит? Или как исправить/избежать?

Ответ 1

В случае, если кто-то еще найдет этот вопрос, так я смог внедрить атрибуты из настраиваемого элемента управления, не имея значений, закодированных html. Это пример кнопки, которая вызывает функцию асинхронного вызова, чтобы подтвердить действие нажатия кнопки.

Ключ должен использовать writer.AddAttribute(), у которого есть флаг, чтобы отключить шаг HTMLEncode. Это также зависит от того, какую версию asp.net вы используете. это работает в .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; }
}

Ответ 2

У нас была та же проблема с одинарными кавычками в значениях атрибутов, когда мы перенесли проект с .NET 3.5 на .NET 4.0. Он преобразует все одинарные кавычки в значения атрибутов в &39;. Итак, мы вернулись к .NET 3.5.

Это вещь .NET 4.0. Подробнее об этой проблеме вы можете прочитать здесь.

Ответ 3

Прежде всего, элемент управления asp checkbox не принимает onclick как допустимый атрибут.

Итак, вы можете сделать две вещи:

1- Если вам не нужно значение на стороне сервера, вы можете просто установить нормальный флажок вместо отметки asp.

2- Если вам нужна сторона сервера значений, добавьте в свой флажок атрибут runat = "server" и место и идентификатор, чтобы вы могли ссылаться на него в своем коде.

<input type="checkbox" id="chk1" onclick="alert('hello');" runat="server" />

Ответ 4

В последнее время я столкнулся с этим, когда контроль обновлялся после того, как была выполнена привязка данных. Исправление заключалось в том, чтобы добавить javascript onchange во время события сервера OnItemDatabound для задействованного ретранслятора:

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 + ")");

Ответ 5

Я столкнулся с такой же проблемой. Я много искал, наконец, решил это, изменив тип содержимого страницы на application/xhtml + xm.

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

Надежда, эта информация поможет вам.

Ответ 6

Хорошо, если вы хотите прекратить вводить одну цитату попробуйте это

onkeypress="if (event.keyCode==39) event.returnValue = false;"

Как

<asp:TextBox ID="TextBox1" runat="server"   onkeypress="if (event.keyCode==39) event.returnValue = false;"
></asp:TextBox>