Сохранение состояния флажка на проблеме формы сообщения - PullRequest
0 голосов
/ 30 июня 2011

У меня проблемы с установкой непроверенного состояния флажков при публикации формы.У меня более 1000 флажков и до сих пор я могу проверить каждый флажок и сохранить там проверенное состояние.Однако у меня проблема с снятием флажков.

  • У меня нет проблем с сохранением проверенного состояния каждого флажка после публикации формы.Моя проблема состоит в том, чтобы отменить выбор значений, а затем сохранить это непроверенное состояние после публикации формы.

Я также использую подкачку на странице, как показано в коде ниже (Значения кнопок отправки являются параметрами хранимой процедуры) -

    <center><input id="buttonStyle" type="submit" name="Page" value="#">
        <% for i = 97 to 122 %>
             <input id="buttonStyle" type="submit" name="Page" value="<%=CHR(i) %>">&nbsp;
        <% next %></center>
<input id="buttonStyle" type="submit" name="Page" value="View All">

Мне нужно сохранить проверенное состояние при просмотре каждой буквы.До сих пор благодаря помощи shadowwizard я могу сохранять отмеченные и непроверенные состояния флажков, если я нажимаю кнопку просмотра всех.Однако проблема сейчас заключается в том, что при нажатии на другую букву (например, - a, b, c) любое проверенное состояние удаляется при нажатии просмотреть все.

<% 
        Dim tempArray
        Dim checkArray
        Dim temphiddenArray
        Dim hiddenArray

        'CheckBox Selection Array
        if len(Request.Form("selectedRecord")) > 0 then tempArray = split(Request.Form("selectedRecord"), ",")
        if isarray(tempArray) then
            redim checkArray(ubound(tempArray))

            'Create CheckArray ARRAY
            for i = lbound(tempArray) to ubound(tempArray)
                checkArray(i) = trim(tempArray(i))
            next

            'Hidden Array check
            if len(request.Form("hiddenArray")) > 0 then temphiddenArray = split(request.Form("hiddenArray"), ",")
            if isarray(temphiddenArray) then

                redim hiddenArray(ubound(temphiddenArray))
                for i = lbound(hiddenArray) to ubound(hiddenArray)
                    hiddenArray(i) = trim(temphiddenArray(i))
                    Session("LastCheck_"&i) = hiddenArray(i)  
                next                    

                if ubound(hiddenArray) >= ubound(checkArray) then
                    for i = lbound(hiddenArray) to ubound(hiddenArray)
                        Session("CheckBox_"&(Session("LastCheck_"&i))) = ""
                    next
                end if        

            end if

            for i = lbound(checkArray) to ubound(checkArray)
                Session("CheckBox_"&checkArray(i)) = "Checked"        
                %>
                <input type="hidden" name="hiddenArray" value="<%=checkArray(i) %>">
                <%
            next

        else
            Session("CheckBox_"&request.Form("hiddenArray")) = ""
        end if
        %>

            <% while not objRS.EOF %>
            <input type="checkbox" name="selectedRecord" value="<%=objRS("Id") %>" <%=Session("CheckBox_"&objRS("Id")) %>>
            objRS.MoveNext
            wend

Ответы [ 5 ]

1 голос
/ 16 июня 2012

Я только что поставил ответ на эту проблему здесь:

как реализовать флажок в классическом asp

Он специально разработан для не пронумерованных, динамически создаваемых флажков, которые требуют передачи как уникального значения идентификатора, так и либо отмеченных, либо непроверенных.

Для решения требуется скрытое поле для каждого флажка, но оно не использует Javascript или какое-либо клиентское программирование.

1 голос
/ 03 июля 2011

Вы идете через весь лес вместо того, чтобы забраться на короткое дерево или, другими словами, сделать что-то простое ужасно сложным.

Вам нужна эта функция:

<%
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
%>

Насколько я вижу, он должен работать и теперь сохранять состояние даже для скрытых флажков.

1 голос
/ 03 июля 2011

Флажки - это фактические элементы, такие как категория или опция?Причина, по которой я спрашиваю, состоит в том, что, если вы устанавливаете флажки, как эти флажки определены?они статические поля или они динамические.Я надеюсь, что динамический.

Вот как вы можете добиться успеха.

  1. Создайте таблицу с именем news (newsid, newstxt)
  2. Создайте таблицу с именем category (catid, catxt)
  3. Создать таблицу с именем NewscatSelected (ncsid, newsid, catid) для хранения флажков выбранных категорий с соответствующим идентификатором новости

Форма страницы флажка (cb1.asp)

  1. Отправлять новостной идентификатор в виде строки запроса на страницу (cb1.asp? newsid = 34)
  2. Динамически перечислять все категории как флажки и получать все записи изNewscatSelected и объедините их в пару.Все элементы, которые существуют в таблице NewscatSelected, будут проверены.Они будут иметь то же имя, но с подчеркиванием и числовым значением категории (cbt_34), чтобы легко их различать

Обновить форму страницы (cb2.asp)

  1. После получения строки запроса удалите все существующие значения отправленного новостного идентификатора, чтобы избежать дублирования
  2. Вставьте новые проверенные значения в таблицу с именем " NewscatSelected "
  3. Переадресация обратно на (cb1.asp? Newsid = 34) и новые значения будут проверены.

См. Изображение ниже

A visual representation

1 голос
/ 01 июля 2011

проверьте полученный исходный код, чтобы увидеть, что он сгенерировал.
Из того, что я вижу, одна проблема состоит в том, что при отправке формы вывешиваются только отмеченные флажки, поэтому, если у вас изначально есть 10 флажков, отметьте 3 из них и отправьте, только те 3 отправят ответ (а из кода я думаю, только те 3 флажка будут отображаться после отправки, все они отмечены).
Вам нужно сохранить все флажки при первом запуске (скажем, с пустым значением по умолчанию, например, пробел), а затем просто изменить их значения сеанса, когда они отмечены

0 голосов
/ 01 июля 2011

Как указано в предыдущем ответе, флажки не публикуются обратно, когда они не отмечены, поэтому в объекте запроса нет ничего, что представляет собой непроверенные, что хорошо, если вы знаете все, что вы ожидаете опубликовать, но если это все динамично, тогда это не очень полезно.

Один из обходных путей, который я использовал ранее, - это использование скрытых полей для фактических данных и использование флажков для управления (через JS) значениями соответствующих скрытых полей, однако я не знаю, как это решение будет работать, если у вас их тысячи на странице!

...