动态更改ASP.net gridviewitemtemplate中Hyperlink的URL

本文关键字:Hyperlink URL gridviewitemtemplate net ASP 动态 | 更新日期: 2023-09-27 18:05:32

我正在创建一个包含itemTemplate w/in gridView的UI。在ItemTemplate内部,我需要一个链接,该链接将根据我绑定到表的表值动态填充。换句话说,有时链接将指向我服务器上的文件,有时它将指向另一个URL。从本质上讲,我需要能够检查我绑定到gridview的表上的标志,然后根据表中相应行的数据更新每一行itemTemplate。

到目前为止,我有这样的标记:
                 <asp:GridView ID="grdVDocuments" 
                                runat="server" 
                                DataSourceID="sqlDS_wwso" 
                                EnableModelValidation="True" 
                                AutoGenerateColumns="False" 
                                OnRowDataBound="grdVDocuments_RowDataBound"                      
                                CssClass="documents_DataTable" AllowPaging="True"            
                                >
                    <Columns>                            
                        <asp:TemplateField HeaderText="Download">
                            <ItemTemplate>
                                <a href="/<%# Eval("fileName") %>" target="_blank" id="lnkContent">
                                   <img src="images/orange_download_cropped.png" alt="" border="0"/></a> 
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:BoundField DataField="displayName" HeaderText="displayName" SortExpression="displayName" />
                        <asp:BoundField DataField="fileName" HeaderText="fileName" SortExpression="fileName" />                             
                        <asp:BoundField DataField="category" HeaderText="category" SortExpression="category" />
                        <asp:BoundField DataField="sub_category" HeaderText="Sub-Category" SortExpression="sub_category" />
                        <asp:BoundField DataField="datePosted" HeaderText="datePosted" SortExpression="datePosted" />                                                         
                    </Columns>
                 </asp:GridView>

和这个隐藏代码,因为它不能识别超链接

    protected void grdVDocuments_RowDataBound(object sender, GridViewRowEventArgs e)        
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            HyperLink myHyperLink = e.Row.FindControl("lnkContent") as HyperLink;
            myHyperLink.NavigateUrl = "<someOtherURL>";
        }
    }

数据表上有一个名为isFile的标志,它是"bit"数据类型。当isFile=1时,URL需要是"…"/",否则itemtemplate的每一行的超链接中的URL需要设置为我的表中保存URL的另一个字段;即。"someOtherURL"。

任何帮助都是感激的;)

谢谢!

动态更改ASP.net gridviewitemtemplate中Hyperlink的URL

您需要在ItemTemplate中使用一个服务器控件。因此,您需要将runat="server"属性添加到a标记。但是,它是一个HtmlAnchor元素,您需要将其转换为HtmlAnchor而不是Hyperlink(代码隐藏):

...
var myHyperLink = e.Row.FindControl("lnkContent") as HtmlAnchor;
myHyperLink.HRef = "<someOtherURL>";
...

或者,您可以在aspx标记中使用<asp:Hyperlink>标记(而不是html锚a)