问题:
在 ASP 中按问题对单选按钮进行分组时.NET MVC 5视图,所有单选按钮都放置在一个组中,使得无法为多个问题选择答案
解决方案:
要正确对单选按钮进行分组,您需要确保每个问题都有唯一的名称属性。这可以通过使用循环索引和视图模型将单选按钮绑定到类型化模型来实现。
视图模型:
首先,创建视图模型,它将用于表示数据并生成form.
public class QuestionVM { public int ID { get; set; } public string Text { get; set; } public int? SelectedAnswer { get; set; } } public class SubjectVM { public int? ID { get; set; } public string Name { get; set; } public List<QuestionVM> Questions { get; set; } } public class StudentVM { public int ID { get; set; } public string Name { get; set; } public List<SubjectVM> Subjects { get; set; } }
View:
在视图中,使用 @Html.BeginForm 方法创建表单元素,然后使用 @ 生成单选按钮Html.RadioButtonFor
@model YourAssembly.StudentVM @using(Html.BeginForm()) { // Hidden field for unique student identifier @Html.HiddenFor(m => m.ID) // Student name (with no binding) @Html.DisplayFor(m => m.Name) // Iterate over subjects and questions for(int i = 0; i < Model.Subjects.Count; i++) { // Hidden field for subject identifier (if any) @Html.HiddenFor(m => m.Subjects[i].ID) // Display subject name @Html.DisplayFor(m => m.Subjects[i].Name) for (int j = 0; j < Model.Subjects[i].Questions.Count; j++) { // Hidden field for question identifier @Html.HiddenFor(m => m.Subjects[i].Questions[j].ID) // Display question text (with no binding) @Html.DisplayFor(m => m.Subjects[i].Questions[j].Text) foreach(var answer in Model.Subjects[i].Questions[j].PossibleAnswers ) { // Bind radio button to property on QuestionVM @Html.RadioButtonFor(m => m.Subjects[i].Questions[j].SelectedAnswer, answer.ID, new { id = answer.ID}) <label for="@answer.ID">@answer.Text</label> } } } // Submit button <input type="submit" value="save" /> }
Controller:
在处理表单提交的控制器操作中,您可以通过 StudentVM 模型访问提交的数据。
[HttpPost] public ActionResult Edit(StudentVM model) { // Save and redirect (not shown) }
通过使用视图模型和 @Html.RadioButtonFor 方法,可以确保每个问题都有唯一的 name 属性,该属性将允许单选按钮正确分组。
以上是如何在 ASP.NET MVC 5 中按问题正确对单选按钮进行分组?的详细内容。更多信息请关注PHP中文网其他相关文章!