Мне трудно понять, как собирать данные из коллекции FormCollection при отправке для моей формы, которая собирает ответы для опроса. В частности, моя проблема связана с вопросами с несколькими вариантами выбора (переключателями) и другим текстовым полем, если эти параметры не применяются.
Мой опрос имеет следующую структуру:
ВОПРОС: [QuestionId, Text, QuestionType, OrderIndex]
MULTIPLE_CHOICE_OPTIONS: [MC_OptionId, QuestionId, OrderIndex, MC_Text]
ОТВЕТ: [AnswerId, QuestionId, MC_OptionId (может быть нулевым), UserTextAnswer]
QUESTION_TYPES: [Multiple_Choice, Multiple_Choice_wOtherOption, FreeText или Checkbox]
На мой взгляд, форма выглядит следующим образом (псевдокод для упрощения):
//Html.BeginForm
foreach( Question q in Model.Questions)
{
q.Text //display question text in html
if (q.QuestionType == Multiple_Choice)
{
foreach( MultipleChoice_Option mc in Model.MULTIPLE_CHOICE_OPTIONS(opt => opt.QuestionId == q.QuestionId)
{
<radio name=q.QuestionId value=mc.MC_OptionId />
// All OK, can use the FormCollectionKey to get the
// QuestionId and its value to get the selected MCOptionId
}
}
else if (q.QuestionType == Multiple_Choice_wOtherOption)
{
foreach( MultipleChoice_Option mc in Model.MULTIPLE_CHOICE_OPTIONS(opt => opt.QuestionId == q.QuestionId)
{
<radio name=q.QuestionId value=mc.MC_OptionId />
}
<textbox name=q.QuestionId />
// ****Problem - I can get the QuestionId from the FormCollection Key, but
// I don't know if the value is from the user entered
// textbox or from a MCOptionId***
}
}
<button type="submit">Submit Survey</button>
// Html.EndForm
Я делал это таким образом, поэтому, возвращаясь к действию контроллера, которое обрабатывает сообщение, я мог прочитать форму FormCollection по ключу, чтобы получить questionId, и значение для каждого индекса, чтобы получить MCOptionID.
Но в случае вопроса с переключателями и текстовым полем с одним и тем же ключом имени, как бы определить, являются ли данные формы переключателем или текстовым полем.
Я вижу, как я делаю эти перерывы, потому что это может быть случай, когда вопрос (id = 1) имеет MCOption w / Id = 5, поэтому переключатель имеет значение 5, а пользователь вводит 5 в Другое текстовое поле. Когда форма отправляется, я вижу, что formcollection [key = "1"] имеет значение 5, и я не могу сказать, что это из usertext или значения radioButton, ссылающегося на MCOptionId.
Есть ли лучший способ решения этой проблемы: структура базы данных, код визуализации представления или способ именования элементов управления формы? Возможно, сбор форм - это не тот путь, но я был озадачен тем, как отослать обратно и заставить работать привязку модели.
Спасибо за любую помощь, ходил по кругу за то, что кажется довольно простым.