代码之家  ›  专栏  ›  技术社区  ›  Martin

如何在NavigateURL中正确包含两个动态项?

  •  0
  • Martin  · 技术社区  · 16 年前

    我有一个使用绑定、超链接和模板字段的网格视图。

    Lo-Fi:HyperLink 控制和 Hi-Fi:HyperLink 控件我知道如何使用HyperLinkField字段,就像在后两列中一样,但我不能在模板列中使用它。

    我需要连接 <%# Eval("Locker_LO_Filename")%>

    <asp:GridView ID="gvLocker" runat="server" HeaderStyle-BackColor="Goldenrod" 
            HeaderStyle-ForeColor="DarkBlue" AlternatingRowStyle-BackColor="Cornsilk" 
                Font-Names="Verdana,arial,helvetica" AutoGenerateColumns="False" Font-   Size="13px" Width="640px" BorderColor="#404040">
                <Columns>   
                    <asp:BoundField DataField="memid" HeaderText="MemID" ReadOnly="True" SortExpression="memid"
                        Visible="False" HeaderStyle-Font-Size="13px" />                         
                    <asp:HyperLinkField  DataNavigateUrlFormatString="myLockerEditSong.aspx?ID={0}&amp;li={1}"
                        DataTextField="EditIt" DataNavigateUrlFields="memid,lockid" HeaderStyle-Font-Size="13px">
                        <ItemStyle Width="65px" Font-Size="13px" />
                        </asp:HyperLinkField>
                    <asp:HyperLinkField  DataNavigateUrlFormatString="myLockerDeleteSong.aspx?ID={0}&amp;li={1}"
                        DataTextField="Delete" DataNavigateUrlFields="memid,lockid" HeaderStyle-Font-Size="13px">
                        <ItemStyle Width="65px" Font-Size="13px" />
                    </asp:HyperLinkField>
                    <asp:TemplateField HeaderText="Song Information" HeaderStyle-Font-Size="13px">
                  <ItemTemplate>
                            <strong><asp:Label ID="Label1" runat="server" Text='<%# Eval("Locker_Title") %>'></asp:Label></strong><br />
                            Lo-Fi:<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# Eval("memid", "/uploads/{0}/Locker/LoFi/{1}") %>'
                                Text='<%# Eval("Locker_LO_Filename") %>' Font-Size="13px"></asp:HyperLink><br />
                            Hi-Fi:<asp:HyperLink ID="HyperLink2" runat="server" NavigateUrl='<%# Eval("memid", "/uploads/{0}/Locker/HiFi/{1}") %>'
                                Text='<%# Eval("Locker_HI_Filename") %>' Font-Size="13px"></asp:HyperLink>                                
                        </ItemTemplate>
                        <ItemStyle Width="350px" Font-Size="13px" />
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="File Information" SortExpression="Locker_UploadDate" HeaderStyle-Font-Size="13px">
                        <ItemTemplate>
                           <strong>Uploaded:</strong> <asp:Label ID="Label2" runat="server" Text='<%# Eval("Locker_UploadDate") %>'></asp:Label><br />
                           <strong>Modified:</strong> <asp:Label ID="Label3" runat="server" Text='<%# Eval("Locker_DateLastModified") %>'></asp:Label>
                           <ItemStyle Font-Size="13px" />
                        </ItemTemplate>                        
                    </asp:TemplateField>                    
                </Columns>        
            <HeaderStyle BackColor="#FFDF59" ForeColor="Maroon" HorizontalAlign="Left" />
            <AlternatingRowStyle BackColor="PaleGoldenrod" />
        </asp:GridView>
    
    2 回复  |  直到 16 年前
        1
  •  1
  •   Ronald Wildenberg    16 年前

    看一看 GridView RowDataBound

    void gvLocker_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            // I'm not sure what kind of data object you use as your datasource,
            // but dataItem should have some type.
            MyObject dataItem = e.Row.DataItem;
    
            // Find the right control inside the row and set its Text property.
            HyperLink link = (HyperLink) e.Row.FindControl("HyperLink1");
            link.Text = dataItem.Locker_LO_Filename;
        }
    }
    
        2
  •  1
  •   Craig    16 年前

    而不是使用<%#评估(..)%>,使用以下命令。。

    <%# FormatHiFi(DataBinder.Eval(Container.DataItem, "Locker_Title"), DataBinder.Eval(Container.DataItem, "OtherStringName"))%>
    

    这将调用代码隐藏页面(见下文)中的一些代码,这些代码将根据需要格式化字符串。

    protected string FormatHiFi(object str1, object str2) 
    {
       return string.Format("/uploads/{0}/Locker/HiFi/{1}", str1.ToString(), str2.ToString())
    }
    

    同样也可以用于低保真。我希望这有帮助,如果没有,至少指向正确的方向。