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(&#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');";

有人知道发生了什么吗?或者如何修复/避免它?

【问题讨论】:

为什么重要?它们不是必需的,但它是有效的 HTML 并且可以正常工作。 【参考方案1】:

当我们将项目从 .NET 3.5 迁移到 .NET 4.0 时,我们在属性值中使用单引号时遇到了同样的问题。它将属性值中的所有单引号转换为&amp;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 个单引号

将单引号转换为字符串中的转义单引号

如何将包含单引号和双引号值的 Python 列表转换为所有双引号值

Ruby on Rails,将项目范围的单引号转换为双引号

RubyMine:按键“转换为单引号”?

Django自动将文本字段中的双引号转换为单引号