Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 超链接字段不显示为链接_Asp.net - Fatal编程技术网

Asp.net 超链接字段不显示为链接

Asp.net 超链接字段不显示为链接,asp.net,Asp.net,我在网格视图中有以下列,我的问题是它只呈现文本“下载”,而不是URL <asp:HyperLinkField DataNavigateUrlFields="ArchiveLocation" Text="Download" DataNavigateUrlFormatString="{0}" /> 当我将带有一行的DataTable绑定到网格时,该行中的ArchiveLocation包含以下值: “~/Common/Forms/ExportStream.aspx?path=C:\D

我在
网格视图中有以下列,我的问题是它只呈现文本“下载”,而不是URL

<asp:HyperLinkField DataNavigateUrlFields="ArchiveLocation" Text="Download" DataNavigateUrlFormatString="{0}" />

当我将带有一行的
DataTable
绑定到网格时,该行中的
ArchiveLocation
包含以下值:

“~/Common/Forms/ExportStream.aspx?path=C:\Development\Chase\Exports\ChaseExport-090312073930.zip”


当使用templateField时,您必须告诉它绑定到什么

<asp:HyperLinkField DataNavigateUrlFields="ArchiveLocation" Text="Download" DataNavigateUrlFormatString="{0}"  NavigateUrl='<%#Eval("ArchiveLocation")%>' />

使用templateField时,您必须告诉它绑定到什么

<asp:HyperLinkField DataNavigateUrlFields="ArchiveLocation" Text="Download" DataNavigateUrlFormatString="{0}"  NavigateUrl='<%#Eval("ArchiveLocation")%>' />

我将调试数据绑定过程,方法是添加onitemdatabound事件处理程序,在其中设置断点,然后查看数据项以确保它符合预期


超链接字段位于行模板中,而不是页眉或页脚,对吗

我将通过添加onitemdatabound事件处理程序来调试数据绑定过程,在其中设置断点,然后查看您的数据项以确保它符合您的期望


超链接字段位于行模板中,而不是页眉或页脚,对吗

仅当您希望所有记录使用相同的URL时,才使用NavigateUrl

似乎只有在字段值中有冒号时,HyperLinkField才会呈现文本。删除冒号,您将看到超链接。我还不知道为什么

显然,OnDataBindField方法调用CrossSiteScriptingValidation.IsDangerousUrl,它代表您考虑“:”危险:

internal static bool IsDangerousUrl(string s)
{
    if (string.IsNullOrEmpty(s))
    {
        return false;
    }
    s = s.Trim();
    int length = s.Length;
    if (((((length > 4) && ((s[0] == 'h') || (s[0] == 'H'))) && ((s[1] == 't') || (s[1] == 'T'))) && (((s[2] == 't') || (s[2] == 'T')) && ((s[3] == 'p') || (s[3] == 'P')))) && ((s[4] == ':') || (((length > 5) && ((s[4] == 's') || (s[4] == 'S'))) && (s[5] == ':'))))
    {
        return false;
    }
    if (s.IndexOf(':') == -1)
    {
        return false;
    }
    return true;
}

仅当您希望所有记录的URL相同时,才使用NavigateUrl

似乎只有在字段值中有冒号时,HyperLinkField才会呈现文本。删除冒号,您将看到超链接。我还不知道为什么

显然,OnDataBindField方法调用CrossSiteScriptingValidation.IsDangerousUrl,它代表您考虑“:”危险:

internal static bool IsDangerousUrl(string s)
{
    if (string.IsNullOrEmpty(s))
    {
        return false;
    }
    s = s.Trim();
    int length = s.Length;
    if (((((length > 4) && ((s[0] == 'h') || (s[0] == 'H'))) && ((s[1] == 't') || (s[1] == 'T'))) && (((s[2] == 't') || (s[2] == 'T')) && ((s[3] == 'p') || (s[3] == 'P')))) && ((s[4] == ':') || (((length > 5) && ((s[4] == 's') || (s[4] == 'S'))) && (s[5] == ':'))))
    {
        return false;
    }
    if (s.IndexOf(':') == -1)
    {
        return false;
    }
    return true;
}

解决方法是使用模板字段并将冒号编码为其十六进制表示形式,即%3A

<asp:TemplateField>
    <ItemTemplate>
        <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("ArchiveLocation","{0}").Replace(":", Server.UrlEncode(":")) %>' Text="Download"></asp:HyperLink>
    </ItemTemplate>
</asp:TemplateField>

解决方法是使用模板字段并将冒号编码为其十六进制表示形式,即%3A

<asp:TemplateField>
    <ItemTemplate>
        <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("ArchiveLocation","{0}").Replace(":", Server.UrlEncode(":")) %>' Text="Download"></asp:HyperLink>
    </ItemTemplate>
</asp:TemplateField>
这给了我一个错误:“只有具有数据绑定事件的对象才支持数据绑定表达式。System.Web.UI.WebControl.HyperLinkField没有数据绑定事件。”这给了我一个错误:“只有具有数据绑定事件的对象才支持数据绑定表达式。System.Web.UI.WebControl.HyperLinkField没有数据绑定事件。“