asp.net中的DataNavigateUrlFormatString转义问题&x27;s超链接字段
我正在asp.net应用程序中使用Hyperlink字段 但是,当我使用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将是: 因为这里有一个字符+,所以我想把它去掉
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组件。请看下面我的答案(这里不能插入代码示例)。