gpt4 book ai didi

c# - 嵌套 for 循环 - RadioButtonFor 不工作

转载 作者:太空宇宙 更新时间:2023-11-03 22:00:41 25 4
gpt4 key购买 nike

我在 View 中嵌套了 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 中的集合,太快乐了!为了确保所有字段都相应地命名,以便在发布时正确绑定(bind)模型,您需要使用 for 循环,这将正确设置索引。

在这样做之前,您将不得不调整模型结构以减轻您的头痛。您需要重新安排您的逻辑,以便您拥有一个分层对象模型,您可以在其中进行更清晰的迭代(这样我们也摆脱了 View 中的逻辑!)

你的调查标题类,你不能在上面放一个子标题列表吗?那么你的副标题类,你能把那个副标题的问题列表放上去吗?这样你就可以:

@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 并在将来对其进行 null 检查):

x => x.surveyResults.First(y => y.SurveyQuestionID == question.ID).Value

关于c# - 嵌套 for 循环 - RadioButtonFor 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10234911/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com