Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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中的DataNavigateUrlFormatString转义问题&x27;s超链接字段_Asp.net_Gridview_Hyperlink_Escaping - Fatal编程技术网

asp.net中的DataNavigateUrlFormatString转义问题&x27;s超链接字段

asp.net中的DataNavigateUrlFormatString转义问题&x27;s超链接字段,asp.net,gridview,hyperlink,escaping,Asp.net,Gridview,Hyperlink,Escaping,我正在asp.net应用程序中使用Hyperlink字段 但是,当我使用DateNavigateUrlFormation时,我遇到了一些问题: 代码如下: <asp:hyperlinkfield datanavigateurlfields="tab_name,rowid" DataNavigateUrlFormatString="~\details.aspx?tab={0}&rowid={1}" /> 现在生成的url将是: 因为这里有一个字符+,所以我想把它去掉

我正在asp.net应用程序中使用Hyperlink字段

但是,当我使用
DateNavigateUrlFormation
时,我遇到了一些问题:

代码如下:

<asp:hyperlinkfield datanavigateurlfields="tab_name,rowid" 
  DataNavigateUrlFormatString="~\details.aspx?tab={0}&rowid={1}" />
现在生成的url将是:

因为这里有一个字符
+
,所以我想把它去掉

我试过这个:

DataNavigateUrlFormatString="~\details.aspx?tab={0}&rowid=<%#Server.HtmlEncode({1})%>"
DataNavigateUrlFormatString=“~\details.aspx?tab={0}&rowid=”
它也不起作用


有什么想法吗?

你需要在活动中处理这个问题

更新

根据这一点,您可以通过编程方式访问超链接字段

HyperLinkField hLink = GridView1.Columns[0] as HyperLinkField;
hLink.DataNavigateUrlFormatString = "details.aspx?pi=" + GridView1.PageIndex.ToString() + "&eID={0}";
或者我认为您需要在RowDataBound事件中处理它


您需要在事件中处理此问题

更新

根据这一点,您可以通过编程方式访问超链接字段

HyperLinkField hLink = GridView1.Columns[0] as HyperLinkField;
hLink.DataNavigateUrlFormatString = "details.aspx?pi=" + GridView1.PageIndex.ToString() + "&eID={0}";
或者我认为您需要在RowDataBound事件中处理它


使用不支持数据绑定的TemplateField

<asp:TemplateField>
    <ItemTemplate>
        <asp:HyperLink runat="server" Text="Link" NavigateUrl='<%# String.Format("~/details.aspx?tab={0}&rowid={1}", Convert.ToString(Eval("tab_name")), Convert.ToString(Eval("rowid"))) %>' />
    </ItemTemplate>
</asp:TemplateField>


这样,您就不需要CodeBehind中的代码,也不需要按索引访问列(这很容易更改,从而导致将来出现问题)。

使用支持数据绑定的TemplateField

<asp:TemplateField>
    <ItemTemplate>
        <asp:HyperLink runat="server" Text="Link" NavigateUrl='<%# String.Format("~/details.aspx?tab={0}&rowid={1}", Convert.ToString(Eval("tab_name")), Convert.ToString(Eval("rowid"))) %>' />
    </ItemTemplate>
</asp:TemplateField>


这样,您就不需要CodeBehind中的代码,也不需要按索引访问列(这很容易更改,从而导致将来出现问题)。

此aswer基于Johan van der Slikke的一个aswer。我刚刚添加了Uri.EscapeDataString:

<asp:TemplateField>
    <ItemTemplate>
        <asp:HyperLink runat="server" Text="Link" NavigateUrl='<%# String.Format("~/details.aspx?tab={0}&rowid={1}", Uri.EscapeDataString(Convert.ToString(Eval("tab_name"))), Uri.EscapeDataString(Convert.ToString(Eval("rowid")))) %>' />
    </ItemTemplate>
</asp:TemplateField>

此答案基于约翰·范德斯莱克的答案。我刚刚添加了Uri.EscapeDataString:

<asp:TemplateField>
    <ItemTemplate>
        <asp:HyperLink runat="server" Text="Link" NavigateUrl='<%# String.Format("~/details.aspx?tab={0}&rowid={1}", Uri.EscapeDataString(Convert.ToString(Eval("tab_name"))), Uri.EscapeDataString(Convert.ToString(Eval("rowid")))) %>' />
    </ItemTemplate>
</asp:TemplateField>


但此单元格是一个超链接字段,我不知道这是否会使此列仅作为文本。\n谢谢,我明天会再试一次。:)但此单元格是超链接字段,我不知道这是否会使此列仅作为文本。\n谢谢,我明天再试一次。:)谢谢,这是最方便的方法,应该是公认的答案。但是您忘记了转义uri组件。请看下面我的答案(这里不能插入代码示例)。谢谢,这是最方便的方法,应该是公认的答案。但是您忘记了转义uri组件。请看下面我的答案(这里不能插入代码示例)。