我目前正在开发一个 MVC 应用程序,该应用程序在单个视图中涉及多组单选按钮。
当视图被回发时,我希望表单数据被自动解析和键入,以便控制器中的回发方法传递为每组单选按钮选择的选项。
下面是一些示例代码来说明这一点:
模型
public class SurveyViewModel {
public List<SurveyQuestion> Questions { get; set; }
}
public class SurveyQuestion
{
public string Question { get; set; }
public IEnumerable<SelectListItem> Options { get; set; }
public int Answer { get; set; }
}
public class Option
{
public int Value { get; set; }
public string Text { get; set; }
}
控制器
public ActionResult Survey()
{
List<string> questions = new List<string> { "Question 1", "Question 2", "Question 3" };
SurveyViewModel model = new SurveyViewModel {
Questions = new List<SurveyQuestion>()
};
foreach (string question in questions)
{
List<Option> list = new List<Option>();
list.Add(new Option() { Value = 1, Text = "Answer 1" });
list.Add(new Option() { Value = 2, Text = "Answer 2" });
list.Add(new Option() { Value = 3, Text = "Answer 3" });
SelectList sl = new SelectList(list, "Value", "Text");
model.Questions.Add(new SurveyQuestion {
Question = question,
Answer = 1, // TODO: Get this from DB
Options = sl
});
}
return View(model);
}
看法
@foreach (SurveyQuestion question in Model.Questions)
{
<p>@question.Question</p>
@Html.RadioButtonForSelectList(m => question.Answer, question.Options)
}
帮手
http://jonlanceley.blogspot.co.uk/2011/06/mvc3-radiobuttonlist-helper.html
如果我们只是坚持使用标准 MVC(无扩展),Html.RadioButtonFor
帮助程序最终会输出在客户端中重复 Option[0]、Option[1]、Option[2] 等命名约定的单选按钮组。
这导致每个组的第一个选项被分组,每个组的第二个选项被分组,依此类推。
另一种方法是在控制器的回发动作中检查当前请求表单数据,并手动解析它,但我希望利用 MVC 将传入数据自动转换为类型参数的能力 - 而不是自己做。
谢谢您的帮助