2015-10-16 63 views
1

我有一个ASP.NET 4.5 webforms应用程序和新的<%#:语法来执行自动HTML编码。ASP.NET 4.5 Webforms - HTML编码出错了

我有这样的一个FormView:

<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 Server数据库(简化为只返回一个对象的新实例这里) :

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" 
    }; 
} 

我得到这个输出是好!

enter image description here

WHY被德国元音变音等ü编码成#252; ??

这对我来说没有任何意义.....我希望能使用新的<%#:数据绑定语法来执行自动HTML编码,以防止无意渲染任何恶意代码 - 但是如果所有德语元音变得“过程中,我绝对不会使用这个功能,这真的很可惜!

+0

你可以发布你所有的公司类吗? – DanL

+0

@DanL:只是一个非常简单的DTO--添加到我的问题中 –

回答

2

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

采取以下行作为一个例子:

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

这将有效地成为:

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

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

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

当浏览器显示M&amp;#252;nchenstein时,您会看到M&#252;nchenstein