Элемент модели, переданный в ViewDataDictionary, имеет тип 'System.ValueTuple`2 - PullRequest
1 голос
/ 04 июля 2019

Я определил модель в представлении _ShowComments.cshtml как тип кортежа, но когда я хочу вызвать это Partialview

, я получаю эту ошибку, когда вызываю этот метод в Default.cshtml.

Как мне решить эту проблему?

Сообщение об ошибке:

InvalidOperationException: элемент модели, переданный в ViewDataDictionary, имеет тип 'System.ValueTuple`2[System.Collections.Generic.List`1 [Jahan.Beta.Web.App.Models.Comment], System.Nullable`1 [System.Int32]] ', но для этого экземпляра ViewDataDictionary требуется элемент модели типа' System.ValueTuple`2 [System.Collections.Generic.IList`1 [Jahan.Beta.Web.App.Models.Comment], System.Nullable`1 [System.Int32]] '.

Default.cshtml:

@model List<Comment>

<div class="media mb-4">
    <div class="media-body">
        @Html.Partial("_ShowComments", ValueTuple.Create<List<Comment>, int?>(Model,null))
    </div>
</div>

_ShowComments.cshtml:

@model (IList<Comment> comments, int? parentId)

@if (Model.comments.Any(c => c.ParentId == Model.parentId))
{
    <ul class="list-unstyled">
        @foreach (var childComment in Model.comments.Where(c => c.ParentId == Model.parentId))
        {
            <li class="media">
                @Html.Partial("_ShowComments", (Model.comments, childComment.Id))
            </li>
        }
    </ul>
}

1 Ответ

3 голосов
/ 04 июля 2019

Вы создаете ValueTuple<List<Comment>, int?>, когда представление ожидает ValueTuple<IList<Comment>, int?> (обратите внимание на List против IList), и компилятор видит их как разные типы. Используйте правильный тип кортежа:

@Html.Partial("_ShowComments", ValueTuple.Create<IList<Comment>, int?>(Model,null))

Или, на мой взгляд, более чистый синтаксис:

@Html.Partial("_ShowComments", ((IList<Comment>)Model,null))

Или, мое предпочтительное решение, создать правильный класс для хранения значений:

public class ShowCommentsModel
{
    public IList<Comment> Comments { get; set; }
    public int? ParentId { get; set; }
}

И переключите представление для использования:

@model ShowCommentsModel
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...