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)   @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...... для использования модели в ваши взгляды.
надеюсь, это сработает!