3

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

如果我通过 groupId 和 issueMemberId 就可以了。

<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' 不是有效的虚拟路径。

从错误中可以看出,它正确使用了生效日期的值。这是从第一个示例中唯一改变的地方,所以我不确定为什么它现在不起作用。

4

4 回答 4

5

它可能是正斜杠(在 URL 的参数部分中)或空格。它不是 URL 的有效字符。

用于HttpUtility.UrlEncode对 URL 进行编码。或如以下评论所指定。

于 2013-07-22T12:48:40.003 回答
2

要添加到上面的答案,OP可能应该WebUtility.HttpEncode(...)围绕传递给NavigateUrl属性的字符串使用调用Hyperlink

<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 发送的数据进行编码,以确保恶意输入不会导致某种脚本注入、跨站点脚本攻击或其他恶意意图。

于 2013-07-22T12:51:57.077 回答
2

通过时使用HttpUtility.UrlEncode或。我建议您在传递查询字符串时传递。是 long 数据类型,可以转换为.TicksDateTimeTicksDateTimeTicksDateTime

<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())%> >
于 2013-07-22T12:52:08.973 回答
1

您可以将日期时间发送为Convert.ToDateTime(DataBinder.Eval(Container.DataItem, "EffectiveDate")).ToString("yyyyMMddHHmmss")

然后您可以使用再次将查询字符串值转换回日期时间DateTime.ParseExact(dateString, "yyyyMMddHHmmss")

于 2013-07-22T12:52:30.430 回答