转发器上的HyperLink字符串格式化

时间:2015-10-13 01:36:10

标签: c# asp.net

我需要帮助构建动态网址。 我在GridView上有一个工作的asp:HyperLinkField,但你不能在reater上使用它。我只能使用asp:HyperLink。

这是工作中的一个:

<asp:HyperLinkField Text="Select" DataNavigateUrlFormatString="~/Products/Details?ProductID={0}" DataNavigateUrlFields="ProductID" />

而这不是

<asp:HyperLink runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "ProductName") %>' NavigateUrl='~/Products/Details?ProductID=BK100' />

我在asp:Repeater中使用它。谢谢。

3 个答案:

答案 0 :(得分:0)

跳跃帮助

<asp:HyperLink ID="HyperLink1" runat=server NavigateUrl='<%# DataBinder.Eval(Container.DataItem, "YourField", "Desc.aspx?query={0}") %>'> <%# DataBinder.Eval(Container.DataItem, "YourFieldForText") %>' </asp:HyperLink>

答案 1 :(得分:0)

如果您不介意使用C#代码进行绑定..

<强>的.aspx

<h2>Grid View</h2>
<br />
<asp:GridView ID="gv" runat="server" AutoGenerateColumns="false">
    <Columns>                
        <asp:HyperLinkField HeaderText="Link" Text="Select" 
            DataNavigateUrlFormatString="~/Products/Details?ProductID={0}" 
            DataNavigateUrlFields="ProductID" />
    </Columns>
</asp:GridView>
<br />
<br />
<h2>Repeater</h2>
<br />
<asp:Repeater ID="r" runat="server" OnItemDataBound="r_ItemDataBound">
    <HeaderTemplate>
        <table style="padding: 0px; border-spacing: 0px;">
            <tr>
                <td style="border: 1px solid #ccc; text-align: center;">
                    <asp:Label ID="lblTitle" runat="server" Text="Link" 
                        Font-Bold="true"></asp:Label>
                </td>
            </tr>
    </HeaderTemplate>
    <ItemTemplate>
        <tr>
            <td style="border: 1px solid #ccc; border-top: 0px;">
                <asp:Label ID="lblHidden" runat="server" 
                    Text='<%# Eval("ProductID") %>' Visible="false"></asp:Label>
                <asp:HyperLink ID="hl" runat="server"
                    Text='<%# Eval("ProductName") %>'></asp:HyperLink>
            </td>
        </tr>
    </ItemTemplate>
    <FooterTemplate>
        </table>
    </FooterTemplate>
</asp:Repeater>

<强>的.cs

protected void Page_Load(object sender, EventArgs e)
{
    // Check
    if (!IsPostBack)
    {
        // Variable
        string[] productName = { "SharePoint", "CRM", "SiteCore", "Silver Light" };
        DataTable dt = new DataTable();
        dt.Columns.Add("ProductID");
        dt.Columns.Add("ProductName");

        for (int i = 0; i < productName.Length; i++)
            dt.Rows.Add((i + 1) + "", productName[i]);


        // Bind Grid View
        gv.DataSource = dt;
        gv.DataBind();

        // Bind Repeater
        r.DataSource = dt;
        r.DataBind();
    }
}
protected void r_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        // Variable
        string url = "/Products/Details?ProductID={0}";

        // Find Control
        HyperLink hl = e.Item.FindControl("hl") as HyperLink;
        Label lblHidden = e.Item.FindControl("lblHidden") as Label;

        // Check
        if (hl != null && lblHidden != null)
        {
            // Set Navigation Url
            url = string.Format(url, lblHidden.Text.Trim());
            hl.NavigateUrl = url;
        }
    }
}

答案 2 :(得分:0)

你可以试试这个

<asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%# "~/Products/Details?ProductID="+Eval("ProductID") %>'> <%# Eval("ProductName") %> </asp:HyperLink>