Одиночные кавычки ASP.NET преобразуются в ' - PullRequest
11 голосов
/ 10 июня 2010

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

В 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> 

Что меня особенно беспокоит, так это то, что одна кавычка «автоматически» преобразуется в «''.Если я опущу onclick в разметке и назначу его в Page_Load, точно такие же результаты будут показаны в HTML.

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

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

Ответы [ 5 ]

7 голосов
/ 07 октября 2010

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

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

1 голос
/ 02 марта 2017

В случае, если кто-то еще найдет этот вопрос, я смог вставить атрибуты из пользовательского элемента управления без кодирования значений 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; }
}
1 голос
/ 10 июня 2010

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

Таким образом, вы можете сделать две вещи:

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

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

<input type="checkbox" id="chk1" onclick="alert('hello');" runat="server" />
0 голосов
/ 09 июля 2015

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

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

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

0 голосов
/ 28 августа 2013

Я столкнулся с этим недавно, когда элемент управления обновлялся после того, как произошла привязка данных.Исправление заключалось в добавлении 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 + ")");
...