我在gridview上有一个复选框控件,可以检查所有内容并取消选中所有内容。
该页面也使用分页。每页有25条记录。当然,还有更多内容进入下一页。
用户检查一个或多个复选框,并使用以下代码处理用户的选择:
Dim uItems As String = String.Empty
For Each r As GridViewRow In GridView1.Rows
If CType(r.Cells(0).FindControl("recs"), CheckBox).Checked Then
If uItems <> String.Empty Then
uItems += ","
End If
uItems += "http://default.html?gen=" & r.Cells(1).Text & "&NO=3&F=1"
End If
Next
如果用户检查15或更少,那么你得到这个:
http://default.html?gen=" & r.Cells(1).Text & "&NO=3&F=1
这是有效的,因为你得到了你检查的数量。
我们目前遇到的问题是,如果用户检查的复选框超过15个,我们就会
“Internet Explorer无法显示网页;您可以尝试 - 诊断连接......”
经过多次故障排除后,我们发现它破坏的原因是我们可以将超过15个值从单元格(1)传递到该链接。
有没有人知道这方面的解决方法?
这与我昨天发布的问题完全相同,只是我说错了,从而使专家难以提供正确的解决方案。
感谢您的帮助。
答案 0 :(得分:4)
我认为这与我曾经遇到的问题相同:您正在构建的网址过长,无法正确处理请求。
如果您需要发送very long sequence of data in the URL,则应切换到POST请求(代替GET请求),从而从查询字符串中删除数据
另一个选择是您使用相同的密钥附加网址参数。
答案 1 :(得分:2)
听起来您可能会遇到网址长度的限制(请参阅here - 您可以尝试使用其他浏览器进行确认)。您从每个单元格中检索的文本有多长?
如果这是问题所在,那么您可能希望POST而不是GET(这是查询字符串正在执行的操作)到您的服务器,或找出缩短查询字符串的方法。
答案 2 :(得分:1)
使用您发布的代码,如果您检查了多个项目,则您的网址将类似于
http://default.html?gen=sometext&NO=3&F=1,http://default.html?gen=sometext&NO=3&F=1,http://default.html?gen=sometext&NO=3&F=1
我认为这不是你想要的。
尝试
Dim uItems As String = String.Empty
For Each r As GridViewRow In GridView1.Rows
If CType(r.Cells(0).FindControl("recs"), CheckBox).Checked Then
If uItems <> String.Empty Then
uItems += ","
End If
uItems += r.Cells(1).Text
End If
Next
uItems = "http://default.html?gen=" & uItems & "&NO=3&F=1"
应该返回更像
的内容 http://default.html?gen=sometext,itemblah,moretext&NO=3&F=1
答案 3 :(得分:1)
我怀疑您生成的查询字符串太长但代码存在其他问题。我已将其更改为使用StringBuilder
并保存String
s的重复实例化。
Dim uItems As New StringBuilder("http://default.html?gen=")
For Each r As GridViewRow In GridView1.Row
If CType(r.Cells(0).FindControl("recs"), CheckBox).Checked Then
uItems.AppendFormat("{0},", r.Cells(1).Text)
End If
End For
-- Remove trailing delimiter
uItems.Remove(uItems.Length - 1, 1)
uItems.Append("&NO=3&F=1")
使用此代码uItems.ToString()
将为您提供类似这样的内容
http://default.html?gen=bla1,bla2,bla3&NO=3&F=1
可能你真的想要这样的东西。
Dim uItems As New StringBuilder("http://default.html?")
Dim checkCount = 0
For Each r As GridViewRow In GridView1.Row
If CType(r.Cells(0).FindControl("recs"), CheckBox).Checked Then
uItems.AppendFormat("g{0}={1}&", checkCount, r.Cells(1).Text)
checkCount += 1
End If
End For
-- Remove trailing delimiter
uItems.Remove(uItems.Length - 1, 1)
uItems.Append("&NO=3&F=1")
这将枚举查询字符串中的已检查单元格,并为您提供类似的内容。
http://default.html?g1=bla1&g2=bla2&g3=bla3&NO=3&F=1
返回每个已检查项目的网址
Dim urlItems = New List(Of String)()
Const urlFormat As String = _
"http://default.html?gen={0}&NO=3&F=1"
For Each r As GridViewRow In GridView1.Row
If CType(r.Cells(0).FindControl("recs"), CheckBox).Checked Then
Dim url = String.Format(urlFormat, r.Cells(1).Text)
urlItems.Add(url)
End If
End For
这使得urlItems
是一个通用的字符串列表,每个项目都是一个网址
好的,上面的内容向您展示了如何获取url字符串列表,以便迭代网址
For Each url As String In urlItems
//... Some code for POSTing or GETting .. your request
End For