0

调用@Html.RenderPartial("_ChildPartialView")时,我收到以下错误:

System.Collections.Generic.ICollection' 没有名为 'ElementAt' 的适用方法,但似乎具有该名称的扩展方法。扩展方法不能动态调度。考虑强制转换动态参数或在没有扩展方法语法的情况下调用扩展方法

_Testpaper.cshtml父视图:

    for (i = 0; i < Model.Questions.Count;i++)
    {
        ViewBag.QuestionNumber = i;
        Html.RenderPartial("_QuestionDetail"); //Line causing error
    }

_QuestionDetail.cshtml子视图:

@model StandardVBA.ViewModels.AssessmentModel
<tr style="padding:4px 0px; background-color:lightskyblue; font-weight:bold;font-family:Cambria;">
    <td style="text-align:left;">
        Q @(ViewBag.QuestionNumber + 1) &nbsp @Model.Questions.ElementAt(ViewBag.QuestionNumber).Question
    </td>
    <td style="text-align:center">
        ( @Model.Questions.ElementAt(ViewBag.QuestionNumber).Marks )
    </td>
</tr>
<tr>
    <td class="questions">
        <ol type="A">
            @for (int j = 0; j < Model.Questions.ElementAt(ViewBag.QuestionNumber).QuestionDetails.Count; j++)
            {
                <li>
                    <div style="display: inline-block; vertical-align: top;">
                        @Html.CheckBoxFor(m => m.Questions.ElementAt(ViewBag.QuestionNumber).QuestionDetails.ElementAt(j).IsSelected)
                    </div>

                    @Html.DisplayFor(m => m.Questions.ElementAt(ViewBag.QuestionNumber).QuestionDetails.ElementAt(j).Choice)
                    @Html.HiddenFor(m => m.Questions.ElementAt(ViewBag.QuestionNumber).QuestionDetails.ElementAt(j).IsCorrect)
                </li>
            }
        </ol>

    </td>
</tr>

我也想知道:@Model当子视图在RenderPartial调用中共享相同的模型时,为什么必须在子视图中指定?

4

2 回答 2

1

您需要将模型传递给子局部视图,如下所示:

for (i = 0; i < Model.Questions.Count;i++)
{
    ViewBag.QuestionNumber = i;
    Html.RenderPartial("_QuestionDetail", Model.Questions[i]); //Line causing error
}

确保Model.Questions[i]的类型与子局部视图“ @model StandardVBA.ViewModels.AssessmentModel ”中的模型声明匹配,否则会出现运行时错误。

希望能帮助到你。

于 2019-02-03T07:26:23.490 回答
0

首先,您没有将模型传递给您的子视图,而是在子视图中使用@model,因此通过将模型传递给您的子视图来修复它,如下所示

    for (i = 0; i < Model.Questions.Count;i++)
    {
        ViewBag.QuestionNumber = i;
        Html.RenderPartial("_QuestionDetail", Model); //Line causing error
    }

其次,您在子视图的详细视图中使用 @Html.CheckBoxFor(m => m.Questions.......) ,因此您需要声明 @model...... 以使用模型你的意见。

希望这会奏效!

于 2019-02-03T07:14:07.367 回答