[英]Get selected radiobutton values in MVC
我有下面的模型结构
public class Quiz
{
public List<Question> Questions { get; set; }
}
public class Question
{
public int Id { get; set; }
public String QuestionText { get; set; }
public List<Option> Options { get; set; }
public int AnswerId { get; set; }
}
public class Option
{
public int Id { get; set; }
public String OptionText { get; set; }
public int DisplayOrder { get; set; }
}
我的看法就像下面显示所有问题和选项的地方
foreach (var question in Model.Questions)
{
@Html.DisplayFor(modelItem => question.QuestionText) <br />
foreach (var option in question.Options)
{
@Html.RadioButton("Id", option.Id)@option.OptionText
}
}
<input type="submit" value="Submit" />
我没有获得所有选定单选按钮的值,它总是在表单集合中返回一个值
[HttpPost]
public ActionResult Quiz(Quiz userResponse, FormCollection form)
{
foreach (var item in form.AllKeys)
{
string value = form[item];
// save data
}
//var selectedOption = frm["Id"];
return View();
}
你能帮忙吗?
您创建的单选按钮与您的模型没有关系,并且所有单选按钮都具有相同的name="Id"
属性(并且您将只能从所有问题中选择一个选项)。 您需要为typeof Question
使用for
循环或EditorTemplate
(请参阅此答案以获取更详细的说明)。 使用EditorTemplate
,您的代码将是
/Views/Shared/EditorTemplates/Question.cshtml
@model Question
@Html.HiddenFor(m => m.Id)
@Html.DisplayFor(m => m.QuestionText)
@foreach(var option in Model.Options)
{
<div>
<label>
@Html.RadioButtonFor(m => m.AnswerId , option,Id, new { id = "" })
<span>@option.OptionText</span>
</label>
</div>
}
并且在主视图中
@model Quiz
@using (Html.BeginForm())
{
@Html.EditorFor(m => m.Questions)
<input type="submit" value="Save" />
}
和控制器方法
[HttpPost]
public ActionResult Quiz(Quiz model)
POST方法中的模型将与每个包含其Id
和AnswerId
(所选Option
的Id
)属性的问题绑定。
旁注:您当前的POST方法具有return View()
但这将失败,因为每个Options
属性的值将为null
。 如果需要返回视图(仅在ModelState
无效时才需要),则需要重新填充这些集合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.