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

从C代码更改内容占位符中的Href链接

  •  9
  • dsteele  · 技术社区  · 15 年前

    我有一个包含链接的内容占位符:

    <asp:Content ID="Content5" runat="server"  contentplaceholderid="ContentPlaceHolder3">
    <a href= "../WOPages/WO_Main.aspx?WONum=12345">WorkOrder</a>
    

    我想从代码中更改href querystring。我如何找到它来改变它?

    4 回复  |  直到 15 年前
        1
  •  26
  •   LukeH    15 年前

    如果添加 id 和A runat="server" 链接属性…

    <a id="YourLink" runat="server" href="../WOPages/WO_Main.aspx?WONum=12345">
        WorkOrder
    </a>
    

    …然后您可以访问/更改 HRef 以编程方式设置属性…

    YourLink.HRef = "http://stackoverflow.com/";
    
        2
  •  1
  •   Ben Griswold    15 年前

    您可以清除ContentPlaceholder中的所有控件,然后添加一个新的超链接控件,如下所示:

    // Create your hyperlink control
    HyperLink lnk = new HyperLink();
    lnk.NavigateUrl = "http://domain.com";
    lnk.Text = "Click here";
    
    ContentPlaceHolder3.Controls.Clear();
    ContentPlaceHolder3.Controls.Add(lnk);
    

    或者给超链接一个ID,并通过在ContentPlaceholder中查找控件来更新超链接:

    HyperLink lnk = ContentPlaceHolder3.FindControl("MyLink") as HyperLink;
    lnk.NavigateUrl = "http://domain.com/update/";
    lnk.Text = "Click here too";
    
        3
  •  1
  •   Steve    15 年前

    可以使用渲染标记或执行以下操作:

    <a href="<asp:literal id="hrefString" runat="server"></asp:literal>"
    

    并在代码中指定文本。

        4
  •  0
  •   Guffa    15 年前

    由于链接不是服务器控件,因此占位符包含一个LiteralControl,其中文本是HTML代码。您可以获取HTML代码并替换href属性:

    LiteralControl c = Content5.Controls[0] as LiteralControl;
    c.Text = Regex.Replace(c.Text, "(href=\")[^\"]+(\")", "$1http://www.guffa.com$2");
    

    如果添加 runat="server" 以及链接的ID,这样它就成为了一个服务器控件,它会变得更简单,因为您可以设置它 HRef 财产。