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

时间:2011-06-04 09:37:34

标签: c# asp.net html hyperlink repeater

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

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

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

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

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

  1. 网址是否包含 Id 参数??
  2. 网址是否已包含任何参数??
  3. 使用以下内容:

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

答案 2 :(得分:1)

这应该有用。

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