Одиночные кавычки 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('test');" /><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>