ASP.NET 4.5 Webforms - HTML 编码出错

ASP.NET 4.5 Webforms - HTML Encoding gone wrong

我在使用 ASP.NET 4.5 webforms 应用程序和新的 <%#: 语法进行自动 HTML 编码时遇到问题。

我有这样的窗体视图:

<asp:FormView runat="server" ID="FormViewCompany" ItemType="FormViewEncoding.Model.Company" DefaultMode="ReadOnly"
    SelectMethod="Select">
    <ItemTemplate>
        <em>Company</em>
        <br/><br/>
        <asp:Label runat="server" ID="lblName" Text="Name" Width="200px"/>
        <asp:TextBox runat="server" ID="tbxName" Text="<%#: Item.Name %>" Width="600px" />
        <br/>
        <asp:Label runat="server" ID="lblAddress" Text="Address" Width="200px"/>
        <asp:TextBox runat="server" ID="tbxAddress" Text="<%#: Item.Address %>" Width="600px" />
        <br/>
        <asp:Label runat="server" ID="lblZipAndCity" Text="Zip/City" Width="200px"/>
        <asp:TextBox runat="server" ID="tbxZip" Text="<%#: Item.ZipCode %>" Width="75px" />
        &nbsp;
        <asp:TextBox runat="server" ID="tbxCity" Text="<%#: Item.City %>" Width="525px"/>
        <br/>
    </ItemTemplate>    
</asp:FormView>

当我从我的 SQL 服务器数据库加载名称和地址中包含德语变音符号的公司时(这里简化为 return 对象的新实例):

public class Company
{
    public string Name { get; set; }
    public string Address { get; set; }
    public string ZipCode { get; set; }
    public string City { get; set; }
}

public Company Select()
{
    return new Company
    {
        Name = "Müller & Söhne AG",
        Address = "Haupstrasse 14",
        ZipCode = "5600",
        City = "Münchenstein"
    };
}

我得到的输出 NOT 很好!

为什么 ü 这样的德语变音符号被编码成 #252;

这对我来说毫无意义.....我希望使用新的 <%#: 数据绑定语法进行自动 HTML 编码以防止无意中呈现任何恶意代码 - 但如果所有德国变音符号都在这个过程中获得 "mangled",我绝对不会使用这个功能,这真的很遗憾!

我认为这是因为文本被编码了两次。

以下面一行为例:

<asp:TextBox runat="server" ID="tbxCity" Text="<%#: Item.City %>" Width="525px"/>

这将有效地变成:

<asp:TextBox runat="server" ID="tbxCity" Text="M&#252;nchenstein" Width="525px"/>

这是由于使用 <%#: %> 语法完成的编码。

TextBox 控件本身也对其文本值进行 HtmlEncoding,因此 TextBox 控件将输出“M&#252;nchenstein”的 html 编码,即“M&amp;#252;nchenstein”。

当浏览器呈现 M&amp;#252;nchenstein 时,您将看到 M&#252;nchenstein