問題:
在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中文網其他相關文章!