Gridview Hyperlinkfield using DataNavigateUrlFormatString with Ampersand

て烟熏妆下的殇ゞ 提交于 2021-02-05 06:50:05

问题


So I have gridview pulling fields from a table and my hyperlinkfield is used to go to a specific page for that row to get more detailed data. Everything seems to work great except when the field used in the hyperlinkfield has an ampersand. I assume it is reading the ampersand as something else and so it doesn't bring up the proper info because the ampersand is in the name in the database.

Hyperlinkfieldcode:

<asp:HyperLinkField HeaderText="Name" Text="{0}" DataNavigateUrlFields="Name" DataNavigateUrlFormatString="item.aspx?name={0}" DataTextField="Name" />

Example:

A clicking on the name "test item" would take you to mysite.com/item.aspx?name=test%20item and this works.

However, clicking on "test & test item" it takes you to mysite.com/item.aspx?name=test%20item%20&%20item which does not work. It just pulls up a page with blank info.

What can I do to fix this?

Update:

I converted the hyperlinkfield to a hyperlink inside a template field, but the url is now coming out weird.the url now comes out like mysite.com/item.aspx?name=System.Int32%5b%5d

<asp:TemplateField HeaderText="Name">
                      <ItemTemplate>
                <asp:HyperLink runat="server" Text='<%#Eval("Name") %>' DataNavigateUrlFields="Name" NavigateUrl='<%# "name.aspx?name=" + HttpUtility.UrlEncode({0}.ToString())%>'  DataTextField="Name" />
                          </ItemTemplate>
                  </asp:TemplateField>

回答1:


My original answer was incomplete (due to not being able to see the entire code). This answer will contain the missing elements.

The main object is to UrlEncode the data field Name, so that it can be used as (part of) a url link .

1 - First we must ensure that the field "Name", is listed as DataKeyNames for the GridView as follows:

<asp:GridView ID="GridView1" runat="server" DataKeyNames="Name"  ...

2 - Secondly (if using a navigateURL) create a TemplateField i.e. (asp:TemplateField ) and use Eval() method to access the DataField in conjunction with UrlEncode() .

<asp:TemplateField HeaderText="Name">
    <ItemTemplate>
            <asp:HyperLink ID="NameLink" runat="server" Text='<%# Eval("Name") %>' NavigateUrl='<%# "name.aspx?name=" + HttpUtility.UrlEncode(Eval("Name").ToString())%>'  ></asp:HyperLink>
    </ItemTemplate>
</asp:TemplateField>

Option 2 Alternatively you can use a HyperLinkField and DataNavigateURL but you should still designate Name as a DataKeyNames .

Hope this works with no problems. Let me know if any clarification is needed.

Happy coding and Cheers,



来源:https://stackoverflow.com/questions/48997439/gridview-hyperlinkfield-using-datanavigateurlformatstring-with-ampersand

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!