我已经在_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>
}
答案 0 :(得分:3)
当视图期望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