我有一个用它传递变量的超链接。这是使用字符串和服务器属性的组合生成的。然而,它似乎适用于一些变量而不是其他变量。
如果我通过groupId并发出了MemberId,那就没关系。
<asp:HyperLink runat="server" ID="groupUrlLink" NavigateUrl=<%# string.Concat("~/UpdateMember.aspx?groupId=", DataBinder.Eval(Container.DataItem, "GroupID").ToString(),"&issuedMemberId=", DataBinder.Eval(Container.DataItem, "IssuedMemberId").ToString()%> >
但是,如果我改为使用另一个变量,生效日期,
<asp:HyperLink runat="server" ID="groupUrlLink" NavigateUrl=<%# string.Concat("~/UpdateMember.aspx?groupId=", DataBinder.Eval(Container.DataItem, "GroupID").ToString(),"&effectiveDate=",DataBinder.Eval(Container.DataItem, "EffectiveDate").ToString())%> >
我收到错误:
“〜/ UpdateMember.aspx的groupId = 0032409901&安培; EFFECTIVEDATE = 3 /二千○八分之三十一 12:00:00 AM'不是有效的虚拟路径。
从错误中可以看出,它正确地使用了生效日期的值。从第一个例子开始,这是唯一改变的东西,所以我不确定为什么它现在不起作用。
答案 0 :(得分:5)
它可能是正斜杠(在URL的参数部分中)或空格。它不是URL的有效字符。
使用HttpUtility.UrlEncode
对网址进行编码。或者如下面的评论所指定的那样。
答案 1 :(得分:2)
要添加上面的答案,OP应该使用WebUtility.HttpEncode(...)
调用
传递给NavigateUrl
的{{1}}属性的字符串:
Hyperlink
更新:通常,您应始终确保对通过URL发送的数据进行编码,以确保恶意输入不会导致某种脚本注入,跨站点脚本攻击或其他邪恶的意图。
答案 2 :(得分:2)
传递HttpUtility.UrlEncode
时使用Ticks
或DateTime
。我建议你在查询字符串中传递Ticks
时传递DateTime
。 Ticks
是长数据类型,可以转换为DateTime
。
<asp:HyperLink runat="server" ID="groupUrlLink" NavigateUrl=<%# string.Concat("~/UpdateMember.aspx?groupId=", DataBinder.Eval(Container.DataItem, "GroupID").ToString(),"&effectiveDate=",DataBinder.Eval(Container.DataItem, "EffectiveDate").Ticks.ToString())%> >
答案 3 :(得分:1)
您可以将日期时间发送为Convert.ToDateTime(DataBinder.Eval(Container.DataItem, "EffectiveDate")).ToString("yyyyMMddHHmmss")
然后您可以使用DateTime.ParseExact(dateString, "yyyyMMddHHmmss")