ASP.NET单引号转换为'

Her*_*des 12 c# asp.net quotes

注意:最有可能这是一个双重问题,但由于我没有找到一个明确的答案,无论如何我都会问它.

在ASP.NET中,我想在CheckBox的onclick事件中添加一些JavaScript.我简化了这个案例:

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

生成的HTML如下:

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

特别困扰我的是单引号"自动"转换为"'".如果我省略了标记中的onclick并在Page_Load中分配它,则HTML中会显示完全相同的结果.

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

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

小智 7

当我们将项目从.NET 3.5迁移到.NET 4.0时,我们在属性值中出现了与单引号相同的问题.它将属性值中的所有单引号转换为&39;.所以我们回到了.NET 3.5.

这是一个.NET 4.0的东西.您可以在此处详细了解此问题.


Pat*_*ckR 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; }
}
Run Code Online (Sandbox Code Playgroud)