Я создаю страницу в 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>"));
}
}