【问题标题】:Dynamically set a hyperlink control's NavigateUrl property inline动态设置超链接控件的 NavigateUrl 属性内联
【发布时间】:2011-04-05 09:08:57
【问题描述】:

如何在 aspx 页面中动态设置独立(不在 gridview 中)超链接控件的 NavigateUrl 属性内联?

我已尝试执行以下操作,但没有成功。

<asp:HyperLink id="MyLink"
  NavigateUrl="../mypage.aspx?id=<%= pageid %>"
  runat="server">My Page</asp:HyperLink>

【问题讨论】:

    标签: asp.net .net hyperlink webforms


    【解决方案1】:

    您实际上可以在代码隐藏文件中编写一个简单的字符串方法。

    示例

    public string formatUrl(string pageId) {
        return "../mypage.aspx?id=" + pageId;
    }
    

    然后像这样使用它..

    <asp:HyperLink id="MyLink" NavigateUrl="<%= formatUrl(pageid) %>" runat="server">My Page</asp:HyperLink>
    

    如果 pageid 存在

    【讨论】:

    • 这是我尝试过的,但代码没有运行,结果为:localhost/MySite/<%=formatUrl(pageid) %>
    【解决方案2】:

    您可以在代码隐藏中执行此操作:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            string pageid = "123";
            MyLink.NavigateUrl = string.Format("../mypage.aspx?id={0}", pageid);
        }
    }
    

    更新:

    现在@Marko Ivanovski 在 cmets 中指出我这个超链接在 GridView 内,我一开始并没有注意到最简单的方法是使用数据绑定(&lt;%# 语法):

    <asp:TemplateColumn>
        <ItemTemplate>
            <asp:HyperLink 
                id="MyLink" 
                NavigateUrl='<%# Eval("pageid", "~/mypage.aspx?id={0}")  %>'
                runat="server">
            My Page
            </asp:HyperLink>
        </ItemTemplate>
    </asp:TemplateColumn>
    

    在这种情况下,pageid 是数据源的属性。


    更新 2:

    您真的需要服务器端控件吗?怎么样:

    <a href="<%= this.ResolveUrl("~/mypage.aspx?id=" + pageid) %>">
        My Page
    </a>
    

    【讨论】:

    • 他提到链接在 GridView 内:)
    • @Marko,对,感谢您指出这一点。我没有仔细阅读问题:-)
    • 感谢您的解决方案。我实际上确实想了解如何在 DataGrid/GridView 之外进行操作。我只使用一个普通的超链接。我更新了问题以澄清。另外我正在寻找如何内联而不是使用代码隐藏中的 .NavigateUrl 属性。
    • @metanito,在您描述的情况下无法做到这一点。我建议您使用代码隐藏或简单的 HTML(我知道 WebForms 可能会对使用它们的人产生副作用 - 您只是忘记了 Web 工作的基础知识)。
    【解决方案3】:
    <asp:TemplateField HeaderText="Name" HeaderStyle-Width="100">
        <ItemTemplate>
            <a href="f.aspx?id=<%# DataBinder.Eval(Container, "DataItem.i")%>">
                <asp:Label ID="lblN" Font-Underline="true" runat="server" Width="80px" Text='<%#DataBinder.Eval(Container.DataItem,"n")%>' />
            </a>
        </ItemTemplate>
    </asp:TemplateField>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-12-27
      • 1970-01-01
      • 2013-07-20
      • 1970-01-01
      • 1970-01-01
      • 2012-12-08
      相关资源
      最近更新 更多