我在视图中嵌套了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
}
}}
单选按钮名称始终为“Value”,因此不对单选按钮进行分组。我可以做些什么来实现所需的分组?
发布于 2012-04-20 03:23:39
用MVC收藏的啊,joy的!为了确保所有字段都被相应地命名,以便在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并在将来安全起见使用null进行检查):
x => x.surveyResults.First(y => y.SurveyQuestionID == question.ID).Value发布于 2012-04-20 02:59:50
您可以使用接受HtmlAttributes的RadioButtonFor扩展的重载,并设置每个RadioButtons的名称。
https://stackoverflow.com/questions/10234911
复制相似问题