簡體   English   中英

ASP.NET MVC多個單選按鈕表單

[英]ASP.NET MVC Multiple Radiobutton Forms

我正在使用ASP.NET MVC應用程序,該應用程序允許用戶創建自己的調查表。 為了簡化回答這個問題,可以說他們只能創建帶有多項選擇題的調查問卷,每個問題都會作為一個問題顯示給調查員,然后是代表每個可能答案的單選按鈕列表。 用戶可以根據需要在調查中創建盡可能多的多項選擇題。

因此,我有一個ViewModel如下:

public class SurveyViewModel
{
    public int Id { get; set; }
    public IList<Question> Questions { get; set; }
}

public class Question
{
    public int Id { get; set; }
    public string Question { get; set; }
    public IList<Answer> Answers { get; set; }
}

public class Answer
{
    public int Id { get; set; }
    public string LabelText { get; set; }
}

通常,我只是將每個問題的字段以表格的形式添加到SurveyViewModel 但是,在這種情況下,我顯然不知道存在多少問題,因為用戶可以創建任意數量的問題-因此我無法創建一個字段來存儲用戶對每個問題的答案。

所以我的問題是:如何編寫ViewModel和View(以Razor語法),以便可以向Controller提交表單,從而可以保存對任意數量的多項選擇題的回答?

我花了很長的時間在這個牆上敲頭,所以非常感謝所有幫助! 謝謝!

不確定您要問的是什么,因為您似乎擁有了所需的一切,或者至少滿足了大部分需求。 在您的視圖中,您只需遍歷視圖模型上的Questions ,然后針對每個問題遍歷Answers 唯一要記住的是,您需要使用for循環而不是foreach以便可以對列表屬性建立索引,從而使Razor可以為modelbinder生成正確的輸入名稱。 您需要進行的一項修改是向Question添加以下屬性:

public int SelectedAnswerId { get; set; }

然后,您的視圖將類似於:

@for (var i = 0; i < Model.Questions.Count(); i++)
{
    <p>@Model.Questions[i].Question</p>

    @for (var j = 0; j < Model.Questions[i].Answers.Count(); j++)
    {
        @Html.RadioButtonFor(m => m.Questions[i].SelectedAnswerId, Model.Questions[i].Answers[j].Id, new { id = "Question" + i.ToString() + "Answer" + j.ToString() })
        <label for="Question@(i)Answer@(j)">@Model.Questions[i].Answers[j].LabelText</label>
    }
}

編輯 :通過傳遞每個單選按鈕的ID並使用該ID創建標簽來更正單選按鈕標簽。 否則,您將得到一堆標簽,這些標簽實際上不會激活相應的單選按鈕。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM