是否可以使HtmlHelper扩展方法仅适用于具有特定类型的视图

时间:2015-03-03 11:33:10

标签: asp.net-mvc extension-methods html-helper generic-method

我正在尝试为IEnumerable集合实现自己的分页。所以,我有一个名为PagedList的类。我已经完成了类本身,我只需要编写一个HtmlHelper扩展方法来渲染实际的页面。这将是最简单的方法(至少我能想到):

public static MvcHtmlString Paginate<TModel>(this HtmlHelper<TModel>,string url){
      //do the stuff here
      return new MvcHtmlString("Hi");
}

但是,是否可以仅在强类型为PagedList的视图中使此方法可用?

2 个答案:

答案 0 :(得分:3)

虽然@Ehsan Sajjad的答案是正确的,但我找到了一种更简洁的方法来实现这一目标:

public static MvcHtmlString Paginate<T>(this HtmlHelper<PagedList<T>> helper,string url){
    .......
}

我已经尝试过它确实有效。但是目前我可能还没有想到其他一些含义,所以欢迎任何评论或更正。

答案 1 :(得分:2)

您可以在方法上添加constraint,以便只能在特定类型上调用它,例如IEnumerable<PagedList>PagedList<TModel>PagedList,如果需要,则取决于你想要什么类型的模型,还取决于你的PagedList类的实现:

public static MvcHtmlString Paginate<TModel>(this HtmlHelper<TModel> helper,string url) where TModel : IEnmerable<PagedList> {
  //do the stuff here
  return new MvcHtmlString("Hi");
}