Asp.net mvc 3 在ASP MVC 3中获取单选按钮值列表
我正在开发一个评分问题页面 在视图中,我有一个问题列表,每个问题前面有5个单选按钮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" /> <
<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);
}