猿问

C# 使用 Html.RenderPartial 在父视图和子视图之间 ASP.NET MVC

在调用时,我收到以下错误:@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>

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


料青山看我应如是
浏览 164回答 2
2回答

交互式爱情

您需要将模型传递到子部分视图,如下所示:for (i = 0; i < Model.Questions.Count;i++){&nbsp; &nbsp; ViewBag.QuestionNumber = i;&nbsp; &nbsp; Html.RenderPartial("_QuestionDetail", Model.Questions[i]); //Line causing error}确保 Model.Questions[i] 的类型与子部分视图“@model StandardVBA.ViewModels.AssessmentModel”中的模型声明匹配,否则将收到运行时错误。希望它有帮助。

慕妹3146593

首先,您没有将模型传递给子视图,而是在子视图中使用@model,因此通过将模型传递给子视图来修复它,如下所示&nbsp; &nbsp; for (i = 0; i < Model.Questions.Count;i++)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; ViewBag.QuestionNumber = i;&nbsp; &nbsp; &nbsp; &nbsp; Html.RenderPartial("_QuestionDetail", Model); //Line causing error&nbsp; &nbsp; }其次,您正在使用@Html.CheckBoxFor(m = > m.Questions.......)在您的详细信息视图中,这是您的子视图,因此您需要声明@model......以在视图中使用模型。希望这将起作用!
随时随地看视频慕课网APP
我要回答