C# Url不是有效的虚拟路径
我有一个超链接,可以传递变量。这是使用字符串和服务器属性的组合生成的。然而,它似乎适用于某些变量,但不适用于其他变量 如果我通过了groupId和issuedMemberId,那么就可以了C# Url不是有效的虚拟路径,c#,asp.net,webforms,C#,Asp.net,Webforms,我有一个超链接,可以传递变量。这是使用字符串和服务器属性的组合生成的。然而,它似乎适用于某些变量,但不适用于其他变量 如果我通过了groupId和issuedMemberId,那么就可以了 <asp:HyperLink runat="server" ID="groupUrlLink" NavigateUrl=<%# string.Concat("~/UpdateMember.aspx?groupId=", DataBinder.Eval(Container.DataItem, "Gr
<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/31/2008
“12:00:00 AM”不是有效的虚拟路径
从错误中可以看出,它正确地使用了生效日期的值。这是第一个示例中唯一改变的内容,因此我不确定为什么它现在不起作用。可能是前斜杠(在URL的参数部分)或空格。它不是URL的有效字符
使用
HttpUtility.UrlEncode
对URL进行编码。或者正如下面的注释所指定的。要添加到上面的答案中,OP可能应该使用WebUtility.HttpEncode(…)
调用
传递到超链接的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发送的数据进行编码,以确保恶意输入不会导致某种脚本注入、跨站点脚本攻击或其他恶意意图。在传递DateTime
时使用HttpUtility.UrlEncode
或勾号
。我建议您在查询字符串中传递DateTime
时传递Ticks
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())%> >
您可以将datetime作为Convert.ToDateTime(datainder.Eval(Container.DataItem,“EffectiveDate”).ToString(“yyyyMMddHHmmss”)发送。
然后,您可以再次使用datetime.ParseExact(dateString,“yyyyymmddhhmmss”)
将查询字符串值转换回datetime,这是因为日期中有斜杠吗?我可以想象超级链接控件会自动对其URL中的任何特殊字符进行编码,但是您可以通过查看浏览器中呈现的HTML源代码来检查它。要添加到您的答案中,OP可能应该使用WebUtility.HttpEncode(…)
调用传递给超链接的NavigateUrl
属性的字符串。有关详细信息,请参阅我的答案。谢谢,我尝试了NavigateUrl=是的,这是因为我的方法名称错误WebUtility.UrlEncode
应该是。但是,由于它是一个ASP.net应用程序,无论您使用的是WebUtility
还是HttpUtility
,实际上都是相同的方法WebUtility
被引入到System.Net
名称空间中,这样1)您就不必依赖System.Web
,2)我相信使用HttpWebClient
之类的东西。不过谢谢你的关心,你救了我一天+1000 ;)我尝试了这个方法,但是我在ToString函数的参数下得到了一条红线,当我尝试编译它时,我得到了一个错误,表示ToString的任何方法都不接受1个参数。我想可能它没有将其识别为Datetime对象如果它不是Datetime,您可以将其转换为Datetime我尝试了这一点,但我收到一个编译错误,表示无法识别记号