在视图中使用泛型类T



我已经为任何使用分页的视图模型设置了一个模式,并且将在整个站点中使用单个视图。

给定这个接口:

public interface IPaginationModel<T> where T : class
{
IPagedList<T> PagedCollection { get; set; }
int ItemsPerPage { get; set; }
int PageIndex { get; set; }
int TotalPages { get; set; }
}

这个模型

public class CollectionsViewModel : IPaginationModel<CollectionModel>
{
public IEnumerable<CollectionModel> Collections { get; set; }
public IPagedList<CollectionModel> PagedCollection { get; set; }
public int ItemsPerPage { get; set; }
public int PageIndex { get; set; }
public int TotalPages { get; set; }
public CollectionsViewModel()
{

}
}

我想使用一个视图/。CSHTML的方式如下…

@model Solnet.TeddyPicker.Generator.Models.Pagination.IPaginationModel<T>
@Html.PagedListPager(Model.PagedCollection, page => Url.Action("Index", new { pagesize = Model.ItemsPerPage, page = Model.PageIndex }),
new X.PagedList.Web.Common.PagedListRenderOptions()
{
LiElementClasses = new string[] { "page-item" },
PageClasses = new string[] { "page-link" },
Display = X.PagedList.Web.Common.PagedListDisplayMode.Always
})

但是它不像'T',找不到命名空间。有没有办法让视图接受这个泛型?

重点是使用泛型是没有意义的…如果使用泛型,许多操作将不被允许。您将无法使用使用lambda

的帮助程序。TextBoxFor.

当你需要使用多个类型的视图时,正确的方法是使用动态变量,所以你应该这样做:

@model MyList<dynamic>

如果你这样做,你将被允许对你的列表做任何操作,因为实际的语法检查将在运行时完成…然而,这个解决方案也有缺点:

  1. 你可以调用任何方法在你的助手或类型包含动态,但没有智能感知是可用的,因为VisualStudio不知道实际的类型。

  2. 扩展类型不能使用,这意味着你不能调用Html.TextBox(......但是你必须调用定义扩展方法的静态方法,比如

: InputExtensions.TextBox (Html、…

相关内容

  • 没有找到相关文章

最新更新