知道如何获取超过15个URL吗?

时间:2012-08-10 14:28:36

标签: c# vb.net

我在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)传递到该链接。

有没有人知道这方面的解决方法?

这与我昨天发布的问题完全相同,只是我说错了,从而使专家难以提供正确的解决方案。

感谢您的帮助。

4 个答案:

答案 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