Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Url不是有效的虚拟路径_C#_Asp.net_Webforms - Fatal编程技术网

C# Url不是有效的虚拟路径

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

我有一个超链接,可以传递变量。这是使用字符串和服务器属性的组合生成的。然而,它似乎适用于某些变量,但不适用于其他变量

如果我通过了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&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我尝试了这一点,但我收到一个编译错误,表示无法识别记号