c# - 如何将接口的具体实现传递给接受泛型接口的 MVC 部分视图?
问题描述
_PaginationPartialView.cshtml:
@model IPagedListViewModel<object>
<p>PartialTest</p>
索引.cshtml:
@model PagedDocumentList
Html.RenderPartial("_PaginationPartialView", Model);
IPagedListViewModel.cs & PagedDocumentList.cs:
public class PagedDocumentList : IPagedListViewModel<DocumentEntity>
{
public PagedDocumentList()
{
ListOfItems = new List<DocumentEntity>();
}
public int NumberOfPagesAvailable { get; set; }
public int CurrentPageIndex { get; set; }
public int PageSize { get; set; }
public List<DocumentEntity> ListOfItems { get; set; }
}
public interface IPagedListViewModel<T>
{
int NumberOfPagesAvailable { get; set; }
int CurrentPageIndex { get; set; }
int PageSize { get; set; }
List<T> ListOfItems { get; set; }
}
我正在尝试将具体类型传递到部分视图中,但是出现以下错误:
传入字典的模型项的类型为“PagedDocumentList”,但此字典需要“IPagedListViewModel`1[System.Object]”类型的模型项。
由于PagedDocumentList
implements IPagedListViewModel
,我希望我能够将具体实例传递到局部视图中,然后读取局部视图中的object
属性。如何使用接受泛型接口的单个局部视图?
我不喜欢的解决方法:
如果我更新部分以使用以下模型:
@model IPagedListViewModel<DocumentEntity>
然后按预期进行部分渲染。但我不想键入我的部分 - 我想用不同的类型重用它。
我还可以更改PagedDocumentList
如下:
public class PagedDocumentList
{
public PagedDocumentList()
{
ListOfItems = new List<DocumentEntity>();
}
public PaginationDetails PaginationDetails { get; set; }
public List<DocumentEntity> ListOfItems { get; set; }
}
public class PaginationDetails
{
public int NumberOfPagesAvailable { get; set; }
public int CurrentPageIndex { get; set; }
public int PageSize { get; set; }
}
但是,接口只会强制存在具体类型,而不是在我的部分观点中充当签名。我更喜欢让局部视图接受一个通用接口,所以我不需要创建一个新类“只是为了让它工作”。 PaginationDetails
不是真正的类- 它是某些类可能实现的属性的集合。
解决方案
希望我正确理解了你的问题。(请在否决之前给我理由哈哈)。我会做一些改变。首先,您的界面更像是一个抽象类。接口(在我的理解中)有方法(动词)。方法有实现。
public abstract PagedListViewModel
{
int NumberOfPagesAvailable { get; set; }
int CurrentPageIndex { get; set; }
int PageSize { get; set; }
}
您的视图需要是强类型的(例如特定类型不是通用的)。因此,您的子类将在这里使用。
@model PagedDocumentList
// rest of the code
现在,您的部分观点:
@model PagedListViewModel
@Html.EditorFor(o=>o.NumberOfPagesAvailable)
@Html.EditorFor(o=>o.PageSize)
推荐阅读
- apache-kafka - kafka 流中 Protobuf 的字节字段
- json - 历史数据的 BigQuery 表架构
- xml - 如何使用 XSLT 测试图像文件是否存在?
- wordpress - 联系表格 7 WP 主题在提交时未发送输入的信息
- regex - 如何在 CSS 类的括号中选择带有某些关键字的行
- websphere - IBM Watson 翻译文档
- sql - 将不同的 SQL 结果放在不同的文本区域
- python - 如何使用自定义数据集训练 Keras 自动编码器?
- postgresql - 如何在 pgAdmin 中放大错误窗口
- sql-server - docker 容器由于体积而无法创建