ASP.NET 单引号转换为 '
Posted
技术标签:
【中文标题】ASP.NET 单引号转换为 \'【英文标题】:ASP.NET single quotes are converted to 'ASP.NET 单引号转换为 ' 【发布时间】:2011-03-02 03:09:19 【问题描述】:注意:这很可能是一个双重问题,但由于我还没有找到明确的答案,所以我还是要问它。
在 ASP.NET 中,我想将一些 javascript 添加到 CheckBox 的 onclick 事件中。我已将案例简化为:
<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>
特别困扰我的是单引号“自动”转换为“'”。如果我在标记中省略 onclick 并在 Page_Load 中指定它,则完全相同的结果会显示在 HTML 中。
protected void Page_Load(object sender, EventArgs e)
this.TestCheckBox.Attributes["onclick"] = "alert('test');";
有人知道发生了什么吗?或者如何修复/避免它?
【问题讨论】:
为什么重要?它们不是必需的,但它是有效的 HTML 并且可以正常工作。 【参考方案1】:当我们将项目从 .NET 3.5 迁移到 .NET 4.0 时,我们在属性值中使用单引号时遇到了同样的问题。它将属性值中的所有单引号转换为&39;
。所以我们回到了 .NET 3.5。
这是 .NET 4.0 的东西。您可以阅读有关此问题的更多信息here。
【讨论】:
【参考方案2】:如果其他人发现这个问题,这是我能够从自定义控件注入属性而无需对值进行 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;
【讨论】:
【参考方案3】:首先,asp 复选框控件不将 onclick 作为有效属性。
所以你可以做两件事:
1-如果你不需要服务器端的值,你可以放一个普通的复选框而不是asp复选框。
2- 如果您需要值服务器端,请在复选框中添加 runat="server" 属性和位置和 ID,以便您可以在代码中引用它。
<input type="checkbox" id="chk1" onclick="alert('hello');" runat="server" />
【讨论】:
【参考方案4】:我最近遇到了一个在数据绑定发生后更新控件的问题。解决方法是在 OnItemDatabound 服务器事件期间为所涉及的转发器添加 onchange javascript:
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>
【讨论】:
以上是关于ASP.NET 单引号转换为 '的主要内容,如果未能解决你的问题,请参考以下文章
通过 sql developer 导入 csv 时,单引号被转换为 2 个单引号