在网址中插入两个值

时间:2011-09-13 12:21:24

标签: .net asp.net

我想将Request.QueryString["u"]中的值作为第二个参数插入下面的网址中。这样,网址读取 Item.aspx?id = 1& u = 2 。但我无法在NavigateUrl值字段中使用两个服务器端标记。

<asp:HyperLink runat="server" 
               NavigateUrl='<%# Eval("itemID", "Item.aspx?id={0}") %>' /> 

我这样做有错误:

<asp:HyperLink runat="server" 
               NavigateUrl='<%# Eval("itemID", "Item.aspx?id={0}") %>
               <%= "&u="+Request.QueryString["u"].ToString() %>' 
/>

2 个答案:

答案 0 :(得分:3)

尝试以下内容,不确定语法,因为现在无法检查:

NavigateUrl='<%# String.Format(
                    "Item.aspx?id={0}{1}", 
                    Eval("itemID"), 
                    Request.QueryString["u"] == null
                    ? String.Empty
                    : String.Concat("&u=", Request.QueryString["u"].ToString())); %>'

答案 1 :(得分:0)

第二个示例中出现错误,因为您无法在单个属性中连接多个<%# %>表达式。

即,语法总是<tag property='<%# expression %>' />

这种表达的一个例子可以在sll的答案中找到。既然你在答案中添加了一个问题,我就会无耻地窃取他的答案并添加你需要的功能:

  我忘记了。有时Request.QueryString [“u”]可能为null,当它为null时我也不希望url中的&amp; u =。我试图将其移动到&lt;%#&amp;%&gt; -tags之外的变量中,但随后在标记内找不到该变量。

在这种情况下,使用条件(使用三元?:运算符):

NavigateUrl='<%# "Item.aspx?id=" + Eval("itemID") +
                 (Request.QueryString["u"] != null
                  ? "&u=" + Request.QueryString["u"] : "") %>'

您不需要ToString,因为QueryString["u"]已经返回一个字符串。但是,您应该做的是正确编码文本,因为字符串可能包含&或其他特殊字符,这些字符会“破坏”您的网址:

NavigateUrl='<%# "Item.aspx?id=" + Eval("itemID") +
                 (Request.QueryString["u"] != null
                  ? "&u=" + Server.UrlEncode(Request.QueryString["u"]) 
                  : "") %>'