C # ASP.NET MVC модель разделения ошибок между родительским и дочерним представлениями с использованием Html.RenderPartial - PullRequest
0 голосов
/ 03 февраля 2019

При вызове @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 ]

0 голосов
/ 03 февраля 2019

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

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

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

0 голосов
/ 03 февраля 2019

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

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

...