Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# for循环中名称属性asp.net mvc上的唯一名称_C#_Asp.net_Asp.net Mvc_Razor - Fatal编程技术网

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;i 将第二个for循环更改为以下内容:

对于(var i=1;i 但这是不好的,因为当你有多个问题和多个嵌套的问题时,它们会混淆

也许这样更好:

if (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开始。谢谢您的回答。但它不太管用。不,那不管用。我无法按您希望的方式更改循环,因为我