Url不是有效的虚拟路径
本文关键字:虚拟 路径 有效 Url | 更新日期: 2023-09-27 18:24:28
我有一个超链接,它传递变量。这是使用字符串和服务器属性的组合生成的。然而,它似乎对一些变量有效,但对其他变量无效。
如果我传递groupId和issuedMemberId,那就没问题了。
<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&生效日期=2008年3月31日"12:00:00 AM"不是有效的虚拟路径。
从错误中可以看出,它正确地使用了"生效日期"的值。这是唯一一个与第一个例子不同的地方,所以我不知道为什么它现在不起作用。
可能是正斜杠(在URL的参数部分)或空格。它不是URL的有效字符。
使用HttpUtility.UrlEncode
对URL进行编码。或者按照下面的注释指定。
传递DateTime
时使用HttpUtility.UrlEncode
或Ticks
。我建议您在查询字符串中传递DateTime
时传递Ticks
。CCD_ 7是可以转换为CCD_ 8的长数据类型。
<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())%> >
为了增加上面的答案,OP可能应该使用WebUtility.HttpEncode(...)
调用传递给Hyperlink
:的NavigateUrl
属性的字符串
<asp:HyperLink runat="server" ID="groupUrlLink" NavigateUrl=<%# WebUtility.UrlEncode(string.Concat("~/UpdateMember.aspx?groupId=", DataBinder.Eval(Container.DataItem, "GroupID").ToString(),"&effectiveDate=",DataBinder.Eval(Container.DataItem, "EffectiveDate").ToString())) %> >
更新:通常,您应该始终确保对通过URL发送的数据进行编码,以确保恶意输入不会导致某种脚本注入、跨站点脚本攻击或其他邪恶意图。
您可以将日期时间作为Convert.ToDateTime(DataBinder.Eval(Container.DataItem, "EffectiveDate")).ToString("yyyyMMddHHmmss")
发送
然后您可以再次使用DateTime.ParseExact(dateString, "yyyyMMddHHmmss")
将查询字符串值转换回日期时间