首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套的for循环- RadioButtonFor不工作

嵌套的for循环- RadioButtonFor不工作
EN

Stack Overflow用户
提问于 2012-04-20 02:57:03
回答 2查看 834关注 0票数 1

我在视图中嵌套了foreach循环,并且单选按钮有问题。

代码语言:javascript
复制
@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
    }
}

}

单选按钮名称始终为“Value”,因此不对单选按钮进行分组。我可以做些什么来实现所需的分组?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-20 03:23:39

用MVC收藏的啊,joy的!为了确保所有字段都被相应地命名,以便在post上正确地绑定模型,您需要使用for循环,这将正确地设置索引。

在此之前,您必须调整您的模型结构,以节省您的头疼。你需要重新安排你的逻辑,这样你就有了一个层次化的对象模型,在这个模型中你可以更清晰地迭代(这样我们也摆脱了视图中的逻辑!)

你的调查标题类,你不能在上面放一个子标题列表吗?然后是你的副标题类,你能把这个副标题的问题列表放进去吗?这样你就可以做到:

代码语言:javascript
复制
@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
        }
    }
}

这假设您的新模型结构类似于(具有以下类):

代码语言:javascript
复制
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:

代码语言:javascript
复制
x => x.surveyResults.Where(y => y.SurveyQuestionID == question.ID).First().Value

您可以简化它,因为First实际上可以使用lamba,如下所示(尽管您应该使用FirstOrDefault并在将来安全起见使用null进行检查):

代码语言:javascript
复制
x => x.surveyResults.First(y => y.SurveyQuestionID == question.ID).Value
票数 3
EN

Stack Overflow用户

发布于 2012-04-20 02:59:50

您可以使用接受HtmlAttributes的RadioButtonFor扩展的重载,并设置每个RadioButtons的名称。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10234911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档