Можно ли сделать метод расширения HtmlHelper доступным только для представлений с определенным типом

Я пытаюсь реализовать собственное разбиение на страницы для коллекций IEnumerable. Итак, у меня есть класс под названием PagedList. Я закончил с самим классом, мне просто нужно написать метод расширения HtmlHelper, который будет отображать фактические страницы. Это был бы самый простой способ (по крайней мере, я могу придумать):

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

Но возможно ли сделать этот метод доступным ТОЛЬКО в тех представлениях, которые строго типизированы для PagedList?


person Mikayil Abdullayev    schedule 03.03.2015    source источник
comment
Судя по тому, что я могу найти в Google, это возможно, да, но я еще не видел никаких подтверждающих фрагментов кода.   -  person Inspector Squirrel    schedule 03.03.2015


Ответы (2)


Хотя ответ @Ehsan Sajjad правильный, я нашел более аккуратный способ сделать это:

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

Я пробовал, и это действительно работает. Но могут быть и другие последствия, о которых я не могу думать в данный момент, поэтому любые комментарии или исправления приветствуются.

person Mikayil Abdullayev    schedule 03.03.2015

Вы можете наложить ограничение на метод, чтобы его можно было вызывать только для определенных типы, например, 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");
}
person Ehsan Sajjad    schedule 03.03.2015