2015-10-16 60 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