asp.net 的 HyperLinkField 中的 DataNavigateUrlFormatString 转义问题

发布于 2024-11-18 08:59:31 字数 846 浏览 1 评论 0原文

我在我的 asp.net 应用程序中使用 HyperLinkField。

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

这是代码:

<asp:hyperlinkfield datanavigateurlfields="tab_name,rowid" 
  DataNavigateUrlFormatString="~\details.aspx?tab={0}&rowid={1}" />

由于有时 rowid 可能包含一些在 http 中具有指定含义的字符,因此在服务器端我无法获得正确的rowid

例如,一行的 rowid

AAAAAAAXXX+BA

现在生成的 url 将为:

http://xxx/details.aspx?tab=tab_name&rowid=AAAAAAAXXX+BA

由于这里有一个字符+,我想解释一下 它。

我试过这个:

DataNavigateUrlFormatString="~\details.aspx?tab={0}&rowid=<%#Server.HtmlEncode({1})%>"

它也不起作用。

有什么想法吗?

I am usin the HyperLinkField in my asp.net application.

However when I use the DateNavigateUrlFormation I meet some problem:

This is the code :

<asp:hyperlinkfield datanavigateurlfields="tab_name,rowid" 
  DataNavigateUrlFormatString="~\details.aspx?tab={0}&rowid={1}" />

Since sometime the rowid may contain some characters which has the specified meaning in the http,so in the server side I can not get the correct rowid.

For example,the rowid of one row maybe

AAAAAAAXXX+BA

Now the generated url would be :

http://xxx/details.aspx?tab=tab_name&rowid=AAAAAAAXXX+BA

Since there is a character + here,I want to excape it.

I tried this:

DataNavigateUrlFormatString="~\details.aspx?tab={0}&rowid=<%#Server.HtmlEncode({1})%>"

It does not work also.

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

流殇 2024-11-25 08:59:31

使用支持数据绑定的 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 中的代码,也不需要通过索引访问列(这很容易更改,从而导致将来出现问题)。

Use a TemplateField which does support the databinding.

<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>

This way you don't need code in CodeBehind and you don't need to access columns by index (which can easily change and thus lead to problems in the future).

耳根太软 2024-11-25 08:59:31

此答案基于 Johan van der Slikke 的答案。我刚刚添加了 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>

This aswer is based on Johan van der Slikke's one. I just added 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>
星星的轨迹 2024-11-25 08:59:31

您需要在 RowDataBound 事件。

if (e.Row.RowType == DataControlRowType.DataRow)
{ 
    e.Row.Cells[indexOfYourColumn].Text = Server.HtmlEncode(e.Row.Cells[indexOfYourColumn].Text);
}

更新

看看这篇文章

据此您可以以编程方式访问超链接字段。

HyperLinkField hLink = GridView1.Columns[0] as HyperLinkField;
hLink.DataNavigateUrlFormatString = "details.aspx?pi=" + GridView1.PageIndex.ToString() + "&eID={0}";

或者我认为您需要在 RowDataBound 事件中处理它。

HyperLink hLink = e.Row.Cells[0].Controls[0] as HyperLink;
hLink.NavigateUrl = "test.aspx?q=" + e.Row.Cells[0].Text;

You need to handle this in the RowDataBound event.

if (e.Row.RowType == DataControlRowType.DataRow)
{ 
    e.Row.Cells[indexOfYourColumn].Text = Server.HtmlEncode(e.Row.Cells[indexOfYourColumn].Text);
}

Update

Take a look at this article

According to that you can programatically access the hyperlink field.

HyperLinkField hLink = GridView1.Columns[0] as HyperLinkField;
hLink.DataNavigateUrlFormatString = "details.aspx?pi=" + GridView1.PageIndex.ToString() + "&eID={0}";

OR I think what you need is to handle it in the RowDataBound event.

HyperLink hLink = e.Row.Cells[0].Controls[0] as HyperLink;
hLink.NavigateUrl = "test.aspx?q=" + e.Row.Cells[0].Text;
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文