【问题标题】:How to have a conditional statement within a control tag?如何在控制标签中添加条件语句?
【发布时间】:2011-09-08 07:43:19
【问题描述】:

我在Repeater 中有一个Hyperlink。我想要的是将NavigateUrl 设置为页面Url 并将查询字符串添加到末尾。我想出了:

<asp:Hyperlink ID="myLink" runat="server" Text="My Link" 
    NavigateUrl='<%# Request.Url + "?Id= + Eval("Id") %>' />

这很好用。问题是我想添加一些逻辑,所以如果Request.Url 已经包含查询字符串,则不要添加 id 查询字符串部分。

如何在 html 页面中执行此操作?请记住,我不能为此使用 javascript

【问题讨论】:

    标签: c# asp.net html hyperlink repeater


    【解决方案1】:

    您必须检查两件事才能正确构建您的导航网址:

    1. 网址是否包含Id参数??
    2. 网址是否已经包含任何参数??

    使用以下内容:

    <asp:Hyperlink ID="myLink" runat="server" Text="My Link"     
        NavigateUrl='<%# Request.QueryString["Id"] == null ? 
        (Request.Url.Contains("?") ? Request.Url + "&Id= + Eval("Id") : 
        Request.Url + "?Id= + Eval("Id")) : Request.Url  %>' />
    

    【讨论】:

    • 问题是:“Request.Url 已经包含一个查询字符串...”。所以不需要专门检查ID查询字符串
    • @Magnus:如果你检查了我的表达,你会发现这不是同一点..
    • 我只是说Request.QueryString["Id"] == null 是不必要的。
    • @Magnus:OP 没有提供足够的细节来做出这个决定!!
    【解决方案2】:

    这应该可行。

    <asp:Hyperlink ID="myLink" runat="server" Text="My Link" 
        NavigateUrl='<%# (Request.Url.ToString().IndexOf("?") > -1 ? Request.Url.ToString() : Request.Url.ToString() + "?Id= + Eval("Id")) %>' />
    

    您可能还想在后面的代码上创建一个受保护的方法,或者如果您需要在多个地方创建一个扩展方法。

    protected string AddIdToRequestUrl(object id)
    {
      return Request.Url.ToString().IndexOf("?") > -1 ? 
        Request.Url.ToString() :
        Request.Url.ToString() + "?Id=" + id.ToString();
    }
    
    <asp:Hyperlink ID="myLink" runat="server" Text="My Link" 
        NavigateUrl='<%# AddIdToRequestUrl(Eval("Id")) %>' />
    

    【讨论】:

    • 你必须修改函数来匹配表达式!!
    【解决方案3】:
    <asp:Hyperlink ID="myLink" runat="server" Text="My Link" 
        NavigateUrl='<%# Request.RawUrl.Contains("?") ? Request.RawUrl : 
        Request.RawUrl + "?Id= + Eval("Id") %>' />
    

    【讨论】:

      猜你喜欢
      • 2015-09-30
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2016-12-04
      • 2019-12-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多