[英]Nested for loops - RadioButtonFor not working
我在視圖中嵌套了foreach循環,並且我遇到了單選按鈕的問題。
@foreach (var header in Model.surveyHeaders)
{
<h1>@header.Name</h1>
foreach (var subHeader in Model.surveySubHeaders.Where(x => x.SurveryHeaderID == header.ID))
{
<h2>@subHeader.Name</h2>
foreach (var question in Model.surveyQuestions.Where(x => x.SurveySubHeaderID == subHeader.ID))
{
@Html.RadioButtonFor(x => x.surveyResults.Where(y => y.SurveyQuestionID == question.ID).First().Value, 1);
@Html.RadioButtonFor(x => x.surveyResults.Where(y => y.SurveyQuestionID == question.ID).First().Value, 2);
@Html.RadioButtonFor(x => x.surveyResults.Where(y => y.SurveyQuestionID == question.ID).First().Value, 3);
@question.Question
}
}
}
單選按鈕名稱始終為“值”,因此單選按鈕不會分組。 我該怎么做才能實現所需的分組?
在MVC的啊收藏,快樂! 為了確保所有字段都相應命名以便在post上正確地進行模型綁定,您需要使用for
循環,這將正確設置索引。
在這樣做之前,您將不得不調整模型結構以避免頭痛。 您需要重新排列邏輯,以便擁有一個分層對象模型,您可以在其中迭代更清晰(這樣我們也可以遠離視圖中的邏輯!)
你的調查標題類,你不能把一個子標題列表放在上面嗎? 然后你的子標題類,你能把那個子標題的問題列表? 這樣你就可以做到:
@for (var i = 0; i < Model.SurveyHeaders.Count; i++)
{
<h1>@Model.SurveyHeaders[i].Name</h1>
for (var j = 0; j < Model.SurveyHeaders[i].SubHeaders.Count; j++)
{
<h2>@Model.SurveyHeaders[i].SubHeaders[j].Name</h2>
for (var k = 0; k < Model.SurveyHeaders[i].SubHeaders[j].Questions.Count; k++)
{
@Html.RadioButtonFor(x => x.SurveyHeaders[i].SubHeaders[j].Questions[k].Value , 1);
@Html.RadioButtonFor(x => x.SurveyHeaders[i].SubHeaders[j].Questions[k].Value , 2);
@Html.RadioButtonFor(x => x.SurveyHeaders[i].SubHeaders[j].Questions[k].Value , 3);
@Model.SurveyHeaders[i].SubHeaders[j].Questions[k].Question
}
}
}
假設您的新模型結構類似於(使用以下類):
public class MyModel
{
public List<SurveyHeader> SurveyHeaders { get; set; }
}
public class SurveyHeader
{
public string Name { get; set; }
public List<SubHeader> SubHeaders { get; set; }
}
public class SubHeader
{
public string Name { get; set; }
public List<Question> Questions { get; set; }
}
public class Question
{
public int Value { get; set; }
public string Question { get; set; }
}
另外一個提示,為了將來參考,您在代碼中使用以下LINQ:
x => x.surveyResults.Where(y => y.SurveyQuestionID == question.ID).First().Value
你可以簡化它,因為First
實際上可以采用lamba,就像這樣(盡管你應該使用FirstOrDefault
並在將來檢查它只是為了安全):
x => x.surveyResults.First(y => y.SurveyQuestionID == question.ID).Value
您可以使用接收HtmlAttributes的RadioButtonFor擴展的重載並設置每個RadioButton的名稱。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.