C# ASP.NET MVC модель разделения ошибок между родительским и дочерним представлениями с использованием Html.RenderPartial

Во время вызова @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 вызов?

2 ответа

Решение

Вам нужно передать модель в дочернее частичное представление следующим образом:

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", в противном случае вы получите ошибку времени выполнения.

Надеюсь, поможет.

Во-первых, вы не передаете модель дочернему представлению, а используете @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...... для использования модели в ваши взгляды.

надеюсь, это сработает!

Другие вопросы по тегам