我想将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() %>'
/>
答案 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"])
: "") %>'