我很難搞清楚如何在提交表單時收集FormCollection中的數據,這些數據會收集調查答案。具體來說,我的問題是有多個選項的選項(單選按鈕)和其他文本框字段(如果選項不適用)。ASP.Net MVC提交調查問題數據
我的調查具有以下結構:
問題:[QuestionId,文本,QuestionType,OrderIndex]
MULTIPLE_CHOICE_OPTIONS:[MC_OptionId,QuestionId,OrderIndex,MC_Text]
答案:[AnswerId, QuestionId,MC_OptionId(可以爲空),UserTextAnswer]
QUESTION_TYPES是:[Multiple_Choice,Multiple_Choice_wOtherOption,FreeText的或複選框]
我的看法是呈現形式如下(僞代碼,以簡化):
//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還是引用MCOptionId的radioButton值。
有沒有更好的方法來解決這個問題,無論是數據庫結構,視圖渲染代碼或窗體控件的命名方式?也許表單集合並不是我們要走的路,但我很難過如何回傳並使模型綁定起作用。
感謝您的任何幫助,一直圍繞着一些似乎很簡單的事情。