[英]How can I pass a concrete implementation of an interface into a MVC Partial View that accepts an Interface of generic type?
_PaginationPartialView.cshtml:
@model IPagedListViewModel<object>
<p>PartialTest</p>
Index.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
實現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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.