【问题标题】:asp:hyperlink href won't show up even though i populate navigateurl即使我填充了 navigateurl,asp:hyperlink href 也不会显示
【发布时间】:2014-01-02 14:56:02
【问题描述】:

有谁知道下面两行代码有什么问题吗?在这两种情况下,当我在浏览器中查看锚链接时,都没有 href:

<asp:HyperLink runat="server" NavigateUrl='<%# Eval(Request.QueryString["conferenceId"], "~/Cms/schedule-edit.aspx?conferenceId={0}&type=workshopStream") %>' Text="Create Workshop Stream"></asp:HyperLink>

<asp:HyperLink runat="server" NavigateUrl='<%# String.Format("~/Cms/schedule-edit.aspx?conferenceId={0}&type=scheduleItem", Request.QueryString["conferenceId"]) %>' Text="Create Schedule Item"></asp:HyperLink>

当我将它放入 Listview 的 ItemTemplate 时,这个完全相同的代码似乎可以正常工作。但在 aspx 文件中单独使用时不起作用。

这有什么问题?

另外,如果我用硬编码字符串 ~/cms/schedule-edit.aspx?conferenceId=2&amp;type=stuff 替换 navigateUrl,则会显示 href。当我在那里有 Eval 或 String.Format 时,它就不起作用了。

【问题讨论】:

    标签: asp.net hyperlink


    【解决方案1】:

    如果那些 HyperLink 服务器控件位于 DataBound 控件(如 GridView)之外,我们的代码中有两个问题 -

    1. 您想使用&lt;%= %&gt; 而不是DataBound 控件中使用的&lt;%# %&gt;
    2. 您不能使用&lt;%= %&gt; 设置服务器控件的属性。基本上,您不能将runat="server"&lt;%= %&gt; 混合使用。

    解决方案

    <a href='<%= String.Format("~/Cms/schedule-edit.aspx?conferenceId={0}&type=scheduleItem", 
        Request.QueryString["conferenceId"]) %>'>Create Workshop Stream</a>
    

    【讨论】:

    • 谢谢,你提出了另一个我要研究的问题,
    【解决方案2】:

    锚语法NavigateUrl='&lt;%#...%&gt;仅在GridView、ListView等内部有效。当不在此类控件内部时,可以通过代码设置其NavigateUrl属性。显然,您还需要为您的 HyperLink 提供一个 ID。

    标记:

    <asp:HyperLink ID="HyperLink1" runat="server" Text="Create Schedule Item"></asp:HyperLink>
    

    背后的代码:

    HyperLink1.NavigateUrl = String.Format("~/Cms/schedule-edit.aspx?conferenceId={0}&type=scheduleItem", Request.QueryString["conferenceId"])
    

    【讨论】:

      【解决方案3】:

      您在此处使用数据绑定表达式。这在以下语法中表示:

       <%# [code]  %>
      

      仅当包含控件或其任何祖先调用其.DataBind() 方法时,才会评估内部代码。

      要解决此问题,您可以:

      • 致电Page.DataBind()
        如果页面上有其他数据绑定控件,这可能会产生一些不良后果,因为此方法将导致所有控件都触发其数据绑定事件。通常,如果您有简约的代码隐藏并且整个页面都依赖于数据绑定表达式,则应用此方法。

      • 给每个HyperLink 一个ID 并致电HyperLinkID.DataBind();

      • 通过在页面/用户控件后面的代码中设置 NavigateUrl 属性,坚持使用 codingstill's answer 中的方法。

      【讨论】:

      • 我不知道 Page.DataBind() 方法。如果 Page.DataBind() 被调用,HyperLink 不需要有 ID,对吧?
      • @codingstill,是的,但是在整个页面上调用它可能会对其他控件产生不良影响。所以,你需要清楚自己在做什么。
      猜你喜欢
      • 1970-01-01
      • 2017-04-25
      • 2018-07-28
      • 2016-07-11
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-11-24
      相关资源
      最近更新 更多