簡體   English   中英

如何使HTML編碼在ASPX頁面中起作用?

[英]How do I get the HTML encoding to work in my ASPX page?

我在asp Gridvidiew中有以下代碼:

<asp:HyperLink ID="hlPSTNNum"  CssClass="OrdRef" Text='<%# DataBinder.Eval(Container.DataItem, "PSTNNum")%>'  runat="server" ToolTip='please click here to view the full record details'
NavigateUrl='<%#"https://THE URL IS HERE Searches/advancedsearchresults.asp?supplierid=" + Eval("Supplierid") + "&amp;display1=IS%20Number&amp;display2=Supplier&amp;display3=Product&amp;display4=Supplier%20Order%20Number&amp;order1=order%20date&amp;pstnnum=" + Eval("PSTNNum")%>' />

我認為Visual Studio 2012正在查詢字符串部分中的分號(來自“ pstnnum =“ + Eval(” PSTNNum“)%>'/>”),我嘗試使用\\進行轉義(這使VS感到高興),但瀏覽器在每次轉義時都保留一個斜杠。

不確定此處的最佳做法,因為即時通訊仍在割傷我的代碼...

我認為更合適的方法是這樣的:

<asp:HyperLink ID="hlPSTNNum"
    CssClass="OrdRef"
    Text='<%# DataBinder.Eval(Container.DataItem, "PSTNNum")%>'
    runat="server"
    ToolTip='please click here to view the full record details'
    NavigateUrl='<%#Server.HtmlEncode("https://THE URL IS HERE Searches/advancedsearchresults.asp?supplierid=" + Eval("Supplierid") + "&display1=IS Number&display2=Supplier&display3=Product&display4=Supplier Order Number&order1=order date&pstnnum=" + Eval("PSTNNum"))%>' />

請注意使用Server.HtmlEncode ,然后使用所需的實際值,而不是直接編碼的值。 這將使在Visual Studio中的構建變得容易,但是要確保在渲染時對其進行編碼。

編輯

在對Microsoft的代碼進行了更多研究之后,我發現HyperLink類的基本RenderContents方法將為您對此進行編碼。 該方法在內部調用另一個名為ResolveClientUrl ,如下所示:

public string ResolveClientUrl(string relativeUrl)
{
    if (this.DesignMode && this.Page != null && this.Page.Site != null)
    {
        IUrlResolutionService urlResolutionService = (IUrlResolutionService)this.Page.Site.GetService(typeof(IUrlResolutionService));
        if (urlResolutionService != null)
        {
            return urlResolutionService.ResolveClientUrl(relativeUrl);
        }
    }
    if (relativeUrl == null)
    {
        throw new ArgumentNullException("relativeUrl");
    }
    string virtualPathString = VirtualPath.GetVirtualPathString(this.TemplateControlVirtualDirectory);
    if (string.IsNullOrEmpty(virtualPathString))
    {
        return relativeUrl;
    }
    string text = this.Context.Request.ClientBaseDir.VirtualPathString;
    if (!UrlPath.IsAppRelativePath(relativeUrl))
    {
        if (StringUtil.EqualsIgnoreCase(text, virtualPathString))
        {
            return relativeUrl;
        }
        if (relativeUrl.Length == 0 || !UrlPath.IsRelativeUrl(relativeUrl))
        {
            return relativeUrl;
        }
    }
    string to = UrlPath.Combine(virtualPathString, relativeUrl);
    text = UrlPath.AppendSlashToPathIfNeeded(text);
    return HttpUtility.UrlPathEncode(UrlPath.MakeRelative(text, to));
}

由於您的網址不是相對的,因此它應該一直排在最后一行,即return語句的最后一行,所以說實話,您根本不需要對它進行編碼。 這會將您的代碼更改為此:

<asp:HyperLink ID="hlPSTNNum"
    CssClass="OrdRef"
    Text='<%# DataBinder.Eval(Container.DataItem, "PSTNNum")%>'
    runat="server"
    ToolTip='please click here to view the full record details'
    NavigateUrl='<%#"https://THE URL IS HERE Searches/advancedsearchresults.asp?supplierid=" + Eval("Supplierid") + "&display1=IS Number&display2=Supplier&display3=Product&display4=Supplier Order Number&order1=order date&pstnnum=" + Eval("PSTNNum")%>' />

不能100%確定這是否可行,但是asp.net 4.5的<%#:自動編碼。 您可以嘗試一下,看看是否可行,只需將<%#更改為<%#:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM