2

我在 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 个值从 cell(1) 传递到该链接。

有人知道解决方法吗?

这与我昨天发布的问题完全相同,只是我描述不正确,从而使专家难以给出正确的解决方案。

谢谢你的帮助。

4

4 回答 4

4

我认为这与我曾经遇到过的问题相同:您正在构建的 URL 太长,无法正确处理请求。

如果您需要在 URL 中发送很长的数据序列,您应该切换到 POST 请求(代替 GET 请求),从而从查询字符串中删除数据

另一种选择是使用相同的键附加 URL 参数。

于 2012-08-10T14:34:57.413 回答
2

听起来您可能会遇到 url 长度的限制(请参阅此处- 您可能会尝试使用其他浏览器进行确认)。您从每个单元格中检索的文本多长时间?

如果这是问题所在,那么您可能想要 POST 而不是 GET(这是查询字符串正在执行的操作)到您的服务器,或者想办法缩短查询字符串。

于 2012-08-10T14:34:31.540 回答
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

于 2012-08-10T14:37:21.690 回答
1

我怀疑您生成的查询字符串太长,但代码还有其他问题。我已将其更改为使用 aStringBuilder并保存Strings 的重复实例化。

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

为每个选中的项目返回一个 URL

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


好的,上面的位向您展示了如何获取 url 字符串列表,因此,迭代 url

For Each url As String In urlItems
    //... Some code for POSTing or GETting .. your request 
End For
于 2012-08-10T14:49:27.410 回答