Лучший рабочий процесс для обновления страницы asp.net с использованием JavaScript - PullRequest
0 голосов
/ 06 декабря 2011

Я создаю страницу в ASP.net с сотнями вопросов, которые разбираю из xml. Я могу отобразить свою первую страницу с вопросами путем рендеринга динамически создаваемых списков радиобуттон в заполнитель с именем sectionHolder .

После проверки JavaScript я хочу перейти к следующему ряду вопросов. Здесь я хочу реализовать наилучшее из возможных решений.

Если я сделаю обратный вызов на свой сервер и удалю все элементы управления из моего sectionHolder с последующим добавлением новых вопросов, на моей странице не будет никаких изменений. Вероятно, это потому, что мне нужно обновить страницу.

Проблема в том, что я обновляю свою страницу, используя javascript:

setTimeout("location.reload(true);", 250);

Я теряю все, что не сохранено в моем объекте сеанса. (все переменные, объявленные в моем классе, сбрасываются) Мне интересно, действительно ли мне нужно сохранить все эти переменные, которые я хочу сохранить в этом объекте сеанса, поскольку я думаю, что это делает мой код довольно грязным. (постоянное приведение от сеанса к значениям, ...)

Я знаю, что могу использовать функцию для вызова моего javascript из asp.net с сгенерированным html-кодом с последующим изменением innerhtml div, но я бы хотел продолжить использовать мой код, который генерирует все вопросы для заполнителя, используя radiobuttonlist и listitem asp, потому что весь мой другой код основан на этом.

Нужно ли мне все помещать в мою сессию или сам генерировать код javascript, или здесь есть другие подходы?

Большое спасибо!

--- EDIT ---

// Вот код, где я задаю свои вопросы (функция вызывается при запуске и при каждой перезагрузке страницы)

protected void AddQuestions()
{
    //lstsections is parsed from xml, it contains all the topics
    var cal = _lstSections.ElementAt(iCurrentSection);

    //limit questions to maxnumber
    var iNumQuestions = (cal._lstQuestions.Count < iNumQuestionsPerPage)
                            ? cal._lstQuestions.Count
                            : iNumQuestionsPerPage;

    for (int a = 0; a < iNumQuestions; a++)
    {
        //we offset our counter to determine page
        var iCurrentID = a + iCurrentQuestionStartIndex;

        //q is our current question
        var q = cal._lstQuestions.ElementAt(iCurrentID);
        //check if we dont have too many questions on this page
        var lbl = new Label() { Text = q.GetText(), ToolTip = q.GetToolTip() };
        var list = new RadioButtonList()
        {
            ID =  "RadioButtonList" + iCurrentID,
            RepeatDirection = RepeatDirection.Horizontal
        };

        list.Attributes.Add("runat", "Server");
        list.Attributes.Add("OnClick", "processText(" + (iCurrentID) + ")");
        list.EnableViewState = false;
        list.CssClass = "clsRadioButtonList";
        sectionHolder.Controls.Add(lbl);
        sectionHolder.Controls.Add(list);

        foreach (var opt in q._lstOptions)
        {
            var item = new ListItem() { Text = opt.Text, Value = opt.Value };
            list.Items.Add(item);
        }

        sectionHolder.Controls.Add(new LiteralControl("<br>"));
    }
}

1 Ответ

0 голосов
/ 06 декабря 2011

Вы смотрели в JQuery Ajax?Вы можете отобразить первый набор вопросов при первой загрузке, а затем использовать jQuery Ajax для отправки последующих запросов на сервер и получения остальных вопросов.После того, как ваш пользователь ответил на все вопросы, он может отправить всю форму со всеми загруженными вопросами и ответами.

Этот подход, вероятно, является лучшим способом сделать чистые частичные обратные передачи на сервер, не теряя все на странице,И вы можете получить доступ к объекту сеанса с помощью HttpContext.Current (поскольку методы, которые вы вызываете с помощью jQuery AJAX, должны быть статическими и иметь атрибут [WebMethod])

Вот отличная статья объясняет, как реализовать jQuery AJAX в ASP.NET Web Forms

...