C# for循环中名称属性asp.net mvc上的唯一名称
我有以下代码:C# for循环中名称属性asp.net mvc上的唯一名称,c#,asp.net,asp.net-mvc,razor,C#,Asp.net,Asp.net Mvc,Razor,我有以下代码: foreach (var questionGroups in Model.ClientQuestionGroups) { for (var j = 0; j < questionGroups.Questions.Count; j++) { <div class="test"> @Html.HiddenFor(m => m.QuestionAnswers[j].FormAnswerId)
foreach (var questionGroups in Model.ClientQuestionGroups)
{
for (var j = 0; j < questionGroups.Questions.Count; j++)
{
<div class="test">
@Html.HiddenFor(m => m.QuestionAnswers[j].FormAnswerId)
@Html.HiddenFor(m => m.QuestionAnswers[j].QuestionId)
@foreach (var alternative in questionGroups.Questions[j].QuestionAlternatives)
{
if (alternative.NestedQuestion != null)
{
nestedQuestions.Add(alternative.NestedQuestion);
}
}
</div>
}
if (nestedQuestions.Count > 0)
{
for (var i = 0; i < nestedQuestions.Count; i++)
{
<div class="nestedQuestion">
@Html.HiddenFor(m => m.QuestionAnswers[i].FormAnswerId)
@Html.HiddenFor(m => m.QuestionAnswers[i].QuestionId)
@foreach (var alt in nestedQuestions[i].QuestionAlternatives)
{
@Html.DisplayFor(m => alt.AlternativeText)
@Html.RadioButtonFor(m => m.QuestionAnswers[i].AlternativeId, alt.Id, new { @class = "questionAlternative" });
}
</div>
}
}
}
foreach(Model.ClientQuestionGroups中的变量questionGroups)
{
对于(var j=0;jm.QuestionAnswers[j].FormAnswerId)
@Html.HiddenFor(m=>m.QuestionAnswers[j].QuestionId)
@foreach(问题组中的变量替代项。问题[j]。问题替代项)
{
if(alternative.NestedQuestion!=null)
{
nestedQuestions.Add(可选。NestedQuestion);
}
}
}
如果(nestedQuestions.Count>0)
{
对于(var i=0;im.QuestionAnswers[i].FormAnswerId)
@Html.HiddenFor(m=>m.QuestionAnswers[i].QuestionId)
@foreach(nestedQuestions[i]中的var alt.问题备选方案)
{
@DisplayFor(m=>alt.AlternativeText)
@RadioButton(m=>m.QuestionAnswers[i].AlternativeId,alt.Id,new{@class=“questionAlternative”});
}
}
}
}
这将生成以下html:
<div class="test">
<input id="QuestionAnswers_0__FormAnswerId" type="hidden" value="00000000-0000-0000-0000-000000000000" name="QuestionAnswers[0].FormAnswerId" data-val-required="Fältet FormAnswerId krävs." data-val="true">
<input id="QuestionAnswers_0__QuestionId" type="hidden" value="427d0a77-b7b7-48b0-956a-28794145e0da" name="QuestionAnswers[0].QuestionId" data-val-required="Fältet QuestionId krävs." data-val="true">
Yes
<input id="QuestionAnswers_0__AlternativeId" class="questionAlternative" type="radio" value="aabf2548-abca-4cb5-89d8-759f2d71be01" nestedquestion="895015c0-2bf0-4c5a-95c9-8d4b29671bf7" name="QuestionAnswers[0].AlternativeId" data-val-required="Fältet AlternativeId krävs." data-val="true">
No
<input id="QuestionAnswers_0__AlternativeId" class="questionAlternative" type="radio" value="91b220dc-3ef3-45a9-8369-dc1e4e2530a8" nestedquestion="" name="QuestionAnswers[0].AlternativeId">
</div>
<div class="nestedQuestion questionDiv">
<p>Testar2</p>
<p>Testar2</p>
<input id="QuestionAnswers_0__FormAnswerId" type="hidden" value="00000000-0000-0000-0000-000000000000" name="QuestionAnswers[0].FormAnswerId">
<input id="QuestionAnswers_0__QuestionId" type="hidden" value="427d0a77-b7b7-48b0-956a-28794145e0da" name="QuestionAnswers[0].QuestionId">
Yes
<input id="QuestionAnswers_0__AlternativeId" class="questionAlternative" type="radio" value="aabf2548-abca-4cb5-89d8-759f2d71be01" name="QuestionAnswers[0].AlternativeId">
No
<input id="QuestionAnswers_0__AlternativeId" class="questionAlternative" type="radio" value="91b220dc-3ef3-45a9-8369-dc1e4e2530a8" name="QuestionAnswers[0].AlternativeId">
</div>
对
不
测试2
测试2
对
不
如您所见,ID属性和Name属性具有相同的值/名称。我不想那样。我希望第一个div是0
,嵌套的问题div是1
,依此类推。我知道这是因为它在同一个循环中
我不太明白如何解决这个命名模式。谁能把我推向正确的方向?你在哪里建立这个?我想这是你的观点?在我看来,这不是最好的做法,因为你把太多的逻辑放在那里。在您的业务层/mvc(控制器)中不可能计算此值。所有的if语句都太多了。在MVC中,u应该尽可能避免视图中的逻辑。当我修复这个部分时,你可以在foreach中进行foreach,而不需要for循环。使管理变得简单得多 首先,for循环是必要的吗 您好
S.没有想到任何例子。。但希望这能有所帮助
@{ int testCounter = 0; int nestedQuestionsCounter = 0; }
@foreach (var questionGroups in Model.ClientQuestionGroups)
{
for (var j = 0; j < questionGroups.Questions.Count; j++)
{
<div class="@(testCounter)test">
@Html.HiddenFor(m => m.QuestionAnswers[j].FormAnswerId)
@Html.HiddenFor(m => m.QuestionAnswers[j].QuestionId)
@foreach (var alternative in questionGroups.Questions[j].QuestionAlternatives)
{
if (alternative.NestedQuestion != null)
{
nestedQuestions.Add(alternative.NestedQuestion);
}
}
</div>
}
if (nestedQuestions.Count > 0)
{
nestedQuestionsCounter = 1;
for (var i = 0; i < nestedQuestions.Count; i++)
{
<div class="@(nestedQuestionsCounter)nestedQuestion">
@Html.HiddenFor(m => m.QuestionAnswers[i].FormAnswerId)
@Html.HiddenFor(m => m.QuestionAnswers[i].QuestionId)
@foreach (var alt in nestedQuestions[i].QuestionAlternatives)
{
@Html.DisplayFor(m => alt.AlternativeText)
@Html.RadioButtonFor(m => m.QuestionAnswers[i].AlternativeId, alt.Id, new { @class = "questionAlternative" });
}
</div>
nestedQuestionsCounter++;
}
}
testCounter++;
}
@{int testCounter=0;int nestedquestionsconter=0;}
@foreach(Model.ClientQuestionGroups中的变量问题组)
{
对于(var j=0;jm.QuestionAnswers[j].FormAnswerId)
@Html.HiddenFor(m=>m.QuestionAnswers[j].QuestionId)
@foreach(问题组中的变量替代项。问题[j]。问题替代项)
{
if(alternative.NestedQuestion!=null)
{
nestedQuestions.Add(可选。NestedQuestion);
}
}
}
如果(nestedQuestions.Count>0)
{
嵌套问题中心=1;
对于(var i=0;im.QuestionAnswers[i].FormAnswerId)
@Html.HiddenFor(m=>m.QuestionAnswers[i].QuestionId)
@foreach(nestedQuestions[i]中的var alt.问题备选方案)
{
@DisplayFor(m=>alt.AlternativeText)
@RadioButton(m=>m.QuestionAnswers[i].AlternativeId,alt.Id,new{@class=“questionAlternative”});
}
NestedQuestionsCenter++;
}
}
testCounter++;
}
for(var i=0;iif (nestedQuestions.Count > 0)
{
for (var i = 0; i < nestedQuestions.Count; i++)
{
<div class="nestedQuestion">
@Html.Hidden("NestedQuestions", Model.QuestionAnswers[i].FormAnswerId)
@Html.Hidden("NestedQuestions", Model.QuestionAnswers[i].QuestionId)
@foreach (var alt in nestedQuestions[i].QuestionAlternatives)
{
@Html.Display("NestedQuestion", alt.AlternativeText)
@Html.RadioButton("NestedQuestion", m.QuestionAnswers[i].AlternativeId, alt.Id, new { @class = "questionAlternative" });
}
</div>
}
}
if(nestedQuestions.Count>0)
{
对于(var i=0;i
这将生成您想要的内容,但在您的后期操作中,您应该具有一些属性来捕获这些嵌套对象。当您使名称匹配时,defaultModelBinder将绑定它
您好
Sven您可以尝试为循环使用计数器值,然后使用计数作为div名称的后缀。@NMathur:您能给我举个例子吗?为什么m.QuestionAnswers在两个不同的部分中使用了两次?它们各自是不同形式的一部分吗?@BrianMains:问题答案属于一个问题。每个div都是一个问题,有两个或多个可供选择的问题。可以重用[0]索引,但这两个ID有两个,实际上应该将问题ID存储在问题部分,将答案ID存储在答案部分。只要您不重用不同部分中的属性,您的方法就可以了。。。如果你只想让第二个0变成1。让for循环从1开始,而不是从0开始。谢谢您的回答。但它不太管用。不,那不管用。我无法按您希望的方式更改循环,因为我