簡體   English   中英

如何將接口的具體實現傳遞到接受通用類型接口的MVC局部視圖中?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM