如何在控件标记中包含条件语句

本文关键字:包含 条件 语句 控件 | 更新日期: 2023-09-27 17:58:27

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

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

这很好用。问题是我想知道如何添加一些逻辑,这样如果Request.Url已经包含查询字符串,那么就不添加id查询字符串部分。

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

如何在控件标记中包含条件语句

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

  1. url是否包含Id参数
  2. url是否已经包含任何参数

使用以下内容:

<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  %>' />

这应该可以工作。

<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")) %>' />
<asp:Hyperlink ID="myLink" runat="server" Text="My Link" 
    NavigateUrl='<%# Request.RawUrl.Contains("?") ? Request.RawUrl : 
    Request.RawUrl + "?Id= + Eval("Id") %>' />