Вы идете через весь лес вместо того, чтобы забраться на короткое дерево или, другими словами, сделать что-то простое ужасно сложным.
Вам нужна эта функция:
<%
Function WasCheckedByUser(id)
Dim x
WasCheckedByUser = "checked=""checked"""
For x=1 To Request.Form("selectedRecord").Count
If Trim(Request.Form("selectedRecord").Item(x))=Trim(id) Then
Exit Function
End If
Next
WasCheckedByUser = ""
End Function
%>
Тогдаиспользуйте это так:
<input type="checkbox" name="selectedRecord" value="<%=objRS("Id") %>" <%=WasCheckedByUser(objRS("Id")) %>/>
Нет необходимости в массивах, нет необходимости в переменных сеанса.Простая итерация по опубликованным значениям (которые являются значениями отмеченных флажков), и, если определенное значение есть, это означает, что соответствующий флажок должен быть установлен, в противном случае оставьте его непроверенным.
Редактировать: вы потеряете "констатировать "потому что, когда вы щелкаете конкретное письмо, вы отправляете в браузер только часть флажков - поэтому предыдущее значение действительно" потеряно "навсегда.
Самый простой способ исправить это отправить все флажкив браузер - всегда - и используя простой стиль, скрыть те, которые вы в данный момент не отправляете вообще.
Итак, вам придется изменить SQL, используемый для заполнения objRS
, чтобы всегда выбирать все, иизмените цикл следующим образом:
<%
Do Until objRS.EOF
Response.Write("<input type=""checkbox"" name=""selectedRecord"" value=""" & objRS("Id") & """ " & WasCheckedByUser(objRS("Id")))
If Len(Request.Form("Page"))=1 And Trim(Left(objRS("Id"), 1))<>Trim(Request.Form("Page")) Then
Response.Write(" style=""display: none;""")
End If
Response.Write(" />")
objRS.MoveNext
Loop
%>
Насколько я вижу, он должен работать и теперь сохранять состояние даже для скрытых флажков.