#c# #asp.net #vb.net
#c# #asp.net #vb.net
Вопрос:
Я работаю в проекте Fast Survey!!
у меня нет времени на проектирование базы данных и все эти вещи, у меня есть только одна таблица, и я должен заполнить ответы, я должен закончить это в течение двух дней.
проблема в том, что у меня более 50 вопросов, и я разделил их на 3 группы, я поместил каждую группу вопросов в пользовательский элемент управления, и я пытаюсь сохранить значения из каждого пользовательского элемента управления.
я хочу временно сохранять тему после каждого пользовательского элемента управления, и когда пользователь дойдет до последнего пользовательского элемента управления и нажмет кнопку «Готово», он должен сохранить все ответы один раз.
итак, есть ли какая-нибудь идея?? Я думал использовать что-то вроде global file !!
но я не знаю, работает это или нет, но я работаю над этим сейчас и надеюсь найти какую-нибудь идею от вас, люди.
Комментарии:
1. Позвольте мне посмотреть, правильно ли я понимаю: a) У вас есть база данных с таблицей, содержащей вопросы. б) вы хотите отображать эти вопросы — по одному за раз — используя ASP.NET c) вы хотите накапливать ответы по мере ответа на каждый вопрос d) Наконец, вы хотели бы отобразить результаты пользователю. Что вы уже сделали?
2. ну, не совсем!! вопросы на странице статичны, как и ответы!! и я не хочу показывать пользователю, что он ответил. и таблица предназначена только для сохранения результатов.
3. Статические жестко закодированные вопросы????
4. да, это жестко запрограммировано, я должен закончить это как можно скорее.
Ответ №1:
Вы можете временно сохранять в сеансе:
var survey = new Survey();
Survey.Name = textBoxName.Text;
Session["answer"] = survey.
Затем позже во всех формах вы можете использовать:
var survey = Session["answer"] as Survey;
if (survey == null)
//error, redirect to start
Где класс опроса — это класс, который содержит всю информацию об опросе.
Другой пример,
//Form1, question 1
List<string> survey = new List<string>();
survey.Add(textBox1.Text);
Session["survey"] = survey;
//Form2, question2
var survey = Session["survey"] as List<string>;
survey.Add(textBox1.Text);
//Form...n... final save
var survey = Session["survey"] as List<string>;
for(int i=0; i< survey.Count;i )
{
SaveAnswer("someId", i, survey(i));
}
Комментарии:
1. я думаю, что использовать сеансы в этом случае нехорошо, потому что у меня более 50 вопросов, в этом случае мне нужно сделать более 50 сеансов, чтобы сохранить ответы!! это может сработать, но есть ли какое-либо лучшее решение??
2. @HAJJAJ: Я думаю, вы здесь в замешательстве: количество сеансов не имеет ничего общего с количеством вопросов. У одного пользователя будет один сеанс (в течение определенного периода времени) при взаимодействии с вашим веб-сайтом.
3. ммм .. нет, это не то, чего я хочу именно тогда. допустим, у нас есть три страницы .. на каждой странице есть 5 вопросов. когда пользователь начнет отвечать на вопросы, система должна сохранить ответы в переменных на каждой странице за кодом… и когда он дойдет до последней страницы и нажмет на кнопку «Готово», он должен сохранить все ответы из этих переменных в базу данных!!!
4. В своем ответе я хотел сказать: создайте один класс (или, может быть, List<string> на ваш выбор) со всеми необходимыми ответами. Сохраните их в сеансе и заполните в серии форм. Когда вы заполните его, делайте с ним все, что хотите: отправляйте по почте, сохраняйте в базе данных и т.д.
5. «и когда он дойдет до последней страницы и нажмет на кнопку «Готово», он должен сохранить все ответы из этих переменных в базу данных» Это действительно проблема? Если вы не укажете компьютеру, что делать, как он узнает?
Ответ №2:
Вот одно из решений
- Создайте страницу вопросов, которая принимает строку запроса, содержащую QuestionID
- Сохранить ответы на вопросы в сеансе.
- Внедрите кнопки [next] и [previous] на странице вопроса, которые позволяют пользователю перейти к URL-адресу с другим QuestionID (первый вопрос — это особый случай, в котором нет [previous])
- Создать страницу результатов
- Если нет ни одного доступного вопроса [next], измените заголовок кнопки на [finish] и укажите на страницу результатов
- Для страницы результатов. Извлеките правильные ответы из вашей таблицы и получите ответы пользователя из сеанса. Сравнить и отобразить результат
Если вы хотите отобразить страницу с группой до трех вопросов на каждой странице, то это становится немного сложнее. Затем на страницу вопроса будет добавлена ссылка с установленным идентификатором группы.
Если у вас есть только 2 дня для вашей реализации, то я бы, безусловно, согласился на простое решение с одним вопросом на страницу.
Комментарии:
1. вопросы и результаты являются статическими, и мне нужно сохранить ответы только со страницы on на другую временную, чтобы сохранить их на последней странице.
Ответ №3:
Это легко решаемо с помощью общедоступных свойств UserControl.
Вот как я бы решил это:
- Каждый пользовательский элемент управления, отображающий вопрос, будет иметь два свойства — вопрос и ответ.
- В обработчике кнопки отправки страницы я включу следующий логический блок
// this dictionary will eventually be serialized and kept in session
// throughout the whole Qamp;A session
var questionsAndAnswers = new Dictionary();
foreach(var control in MyUserControls)
{
questionsAndAnswers.Add(control.Question, control.Answer);
}
this.Session["qamp;a"] = questionsAndAnswers;
Что-то подобное должно сработать.
Основной момент здесь заключается в акценте на получение необходимой информации через открытые свойства ваших дочерних элементов управления (та же концепция может быть применена на любом родительском / дочернем уровне в вашем коде).