Asp.net mvc 3 在ASP MVC 3中获取单选按钮值列表

Asp.net mvc 3 在ASP MVC 3中获取单选按钮值列表,asp.net-mvc-3,razor,radio-button,Asp.net Mvc 3,Razor,Radio Button,我正在开发一个评分问题页面 在视图中,我有一个问题列表,每个问题前面有5个单选按钮 <input name="evalId" type="hidden" value="@Model.Evaluation.EvalId" /> foreach (var question in questionList) { <input name="questionId" type="hidden" value="@question.QuestionId" /> <

我正在开发一个评分问题页面

在视图中,我有一个问题列表,每个问题前面有5个单选按钮

<input name="evalId" type="hidden" value="@Model.Evaluation.EvalId" />
foreach (var question in questionList)
{
     <input name="questionId" type="hidden" value="@question.QuestionId" />
     <div class="row_star" style="border-bottom : 0 none; background: none;">
       @if (!String.IsNullOrEmpty(question.QuestionTitre))
       {
         <p>@question.QuestionTitre.TrimEnd()</p>
       }

       @* here goes the code for 5 radio buttons*@
}

foreach(问题列表中的var问题)
{
@如果(!String.IsNullOrEmpty(question.QuestionTitre))
{
@问题.问题标题.TrimEnd()

} @*下面是5个单选按钮的代码*@ }
现在,在我的控制器中,我想知道每个问题选中了哪个单选按钮

我该怎么做

这是我的视图模型

public class EvaluationViewModel
{
    /// <summary>
    /// 
    /// </summary>
    public EvalEvaluation Evaluation
    {
        get;
        set;
    }

    /// <summary>
    /// 
    /// </summary>
    public Dictionary<EvalQuizz, List<EvalQuestion>> EvalQuizzQuestionList
    {
        get;
        set;
    }
}
公共类EvaluationViewModel
{
/// 
/// 
/// 
公众评价
{
得到;
设置
}
/// 
/// 
/// 
公共词典评估问题列表
{
得到;
设置
}
}

假设您的ViewModel是这样的

public class Question
{
    public int ID { set; get; }
    public string QuestionText { set; get; }
    public List<Answer> Answers { set; get; }
    public int SelectedAnswer { set; get; }
    public Question()
    {
        Answers = new List<Answer>();
    }
}
public class Answer
{
    public int ID { set; get; }
    public string AnswerText { set; get; }
}
public class Evaluation
{
    public List<Question> Questions { set; get; }
    public Evaluation()
    {
        Questions = new List<Question>();
    }
}
现在我们将创建一个编辑器模板来呈现我们的问题。因此,转到“视图”文件夹,并使用当前控制器名称在该文件夹下创建一个名为“编辑模板”的文件夹。 将视图添加到EditorTemplates文件夹,并提供与我们要表示的类名相同的名称。ie:
Question.cshtml

现在将此代码放入编辑器tempalte中

@model YourNameSpace.Question
<div>
    @Html.HiddenFor(x=>x.ID)
    @Model.QuestionText
    @foreach (var a in Model.Answers)
    {
        <p>
        @Html.RadioButtonFor(b=>b.SelectedAnswer,a.ID)  @a.AnswerText 
        </p>
    }
</div>
如果使用visual studio断点,则可以看到发布的值。感谢MVC模型绑定:)


您可以阅读并下载一个工作示例。

您的viewmodel看起来怎么样?哇!非常感谢您的努力和这样的解释。非常感谢您的这篇伟大的文章。我一直在寻找一天的时间来找出如何做到这一点。我尝试了不同的方法,甚至是编辑器模板。我的问题是,我对包含列表的对象使用编辑器模板。这并没有在回发中创建列表并填充对象。但一旦我让MVC自动执行foreach,它就会很好地绑定返回参数。伟大的全胜
@model YourNameSpace.Question
<div>
    @Html.HiddenFor(x=>x.ID)
    @Model.QuestionText
    @foreach (var a in Model.Answers)
    {
        <p>
        @Html.RadioButtonFor(b=>b.SelectedAnswer,a.ID)  @a.AnswerText 
        </p>
    }
</div>
@model YourNameSpace.Evaluation
<h2>Index</h2>
@using (Html.BeginForm())
{
    @Html.EditorFor(x=>x.Questions)
    <input type="submit" />
}
[HttpPost]
public ActionResult Index(Evaluation model)
{
    if (ModelState.IsValid)
    {
        foreach (var q in model.Questions)
        {
            var qId = q.ID;
            var selectedAnswer = q.SelectedAnswer;
            //Save

        }
        return RedirectToAction("ThankYou"); //PRG Pattern
    }
    //reload questions
    return View(model);
}