Asp.net mvc 3 将泛型模型添加到帮助器类

Asp.net mvc 3 将泛型模型添加到帮助器类,asp.net-mvc-3,html-helper,Asp.net Mvc 3,Html Helper,我有以下代码来生成selectlistitems以显示在我的dropdownlist中 public static IEnumerable<SelectListItem> ToSelectListItems(this IEnumerable<BlogCategory> categories, int selectedId) { return categories.OrderBy(category => category.Category

我有以下代码来生成selectlistitems以显示在我的dropdownlist中

public static IEnumerable<SelectListItem> ToSelectListItems(this IEnumerable<BlogCategory>    categories, int selectedId)
    {
        return categories.OrderBy(category => category.Category)
            .Select(category => new SelectListItem
            {
                Selected = (category.ID == selectedId),
                Text = category.Category,
                Value = category.ID.ToString()
            });
    }
公共静态IEnumerable到SelectListItems(此IEnumerable类别,int-selectedId)
{
returncategories.OrderBy(category=>category.category)
.选择(类别=>new SelectListItem
{
选定=(category.ID==selectedId),
Text=category.category,
Value=category.ID.ToString()
});
}

我想使用这个助手类来生成其他列表项,然后再创建一个类别。如何实现这一点?

您可以为查找实体创建基类:

public class BaseEntity
{
   public int Id {get;set;}
   public string Title {get;set;}
}

public class Category : BaseEntity
{
   //Category fields
}

public class Blog : BaseEntity
{
   //Blog fields
}  

public static IEnumerable<SelectListItem> ToSelectListItems(this IEnumerable<BaseEntity> entityList, int selectedId)
{
    return entityList.OrderBy(q => q.Title)
        .Select(q => new SelectListItem
        {
            Selected = (q.Id == selectedId),
            Text = q.Title,
            Value = q.Id.ToString()
        });
}
公共类基本实体
{
公共int Id{get;set;}
公共字符串标题{get;set;}
}
公共类类别:BaseEntity
{
//类别字段
}
公共类博客:BaseEntity
{
//博客字段
}  
公共静态IEnumerable to SelectListItems(此IEnumerable entityList,int-selectedId)
{
返回entityList.OrderBy(q=>q.Title)
.选择(q=>new SelectListItem
{
所选=(q.Id==selectedId),
Text=q.标题,
Value=q.Id.ToString()
});
}

您可以为查找实体创建基类:

public class BaseEntity
{
   public int Id {get;set;}
   public string Title {get;set;}
}

public class Category : BaseEntity
{
   //Category fields
}

public class Blog : BaseEntity
{
   //Blog fields
}  

public static IEnumerable<SelectListItem> ToSelectListItems(this IEnumerable<BaseEntity> entityList, int selectedId)
{
    return entityList.OrderBy(q => q.Title)
        .Select(q => new SelectListItem
        {
            Selected = (q.Id == selectedId),
            Text = q.Title,
            Value = q.Id.ToString()
        });
}
公共类基本实体
{
公共int Id{get;set;}
公共字符串标题{get;set;}
}
公共类类别:BaseEntity
{
//类别字段
}
公共类博客:BaseEntity
{
//博客字段
}  
公共静态IEnumerable to SelectListItems(此IEnumerable entityList,int-selectedId)
{
返回entityList.OrderBy(q=>q.Title)
.选择(q=>new SelectListItem
{
所选=(q.Id==selectedId),
Text=q.标题,
Value=q.Id.ToString()
});
}
Jurgen

假设您的意思是其他列表项都符合与BlogCategory相同的结构,那么您可以在助手中使用接口,而不是具体的类

这可能看起来是这样的:

public interface ICategory
{
    int ID { get; set; }
    string Category { get; set; }
}

public class BlogCategory : ICategory
{
    public int ID { get; set; }
    public string Category { get; set; }
} 

public class PostCategory : ICategory
{
    public int ID { get; set; }
    public string Category { get; set; }
} 
等等等等。。然后根据需要在此接口上使用其他类,使用现有的帮助器类,如下所示:

public static IEnumerable<SelectListItem> ToSelectListItems
    (this IEnumerable<ICategory> categories, int selectedId)
{
    return categories.OrderBy(category => category.Category)
        .Select(category => new SelectListItem
        {
            Selected = (category.ID == selectedId),
            Text = category.Category,
            Value = category.ID.ToString()
        });
}
公共静态IEnumerable to SelectListItems
(此IEnumerable categories,int-selectedId)
{
returncategories.OrderBy(category=>category.category)
.选择(类别=>new SelectListItem
{
选定=(category.ID==selectedId),
Text=category.category,
Value=category.ID.ToString()
});
}
享受…

尤尔根

假设您的意思是其他列表项都符合与BlogCategory相同的结构,那么您可以在助手中使用接口,而不是具体的类

这可能看起来是这样的:

public interface ICategory
{
    int ID { get; set; }
    string Category { get; set; }
}

public class BlogCategory : ICategory
{
    public int ID { get; set; }
    public string Category { get; set; }
} 

public class PostCategory : ICategory
{
    public int ID { get; set; }
    public string Category { get; set; }
} 
等等等等。。然后根据需要在此接口上使用其他类,使用现有的帮助器类,如下所示:

public static IEnumerable<SelectListItem> ToSelectListItems
    (this IEnumerable<ICategory> categories, int selectedId)
{
    return categories.OrderBy(category => category.Category)
        .Select(category => new SelectListItem
        {
            Selected = (category.ID == selectedId),
            Text = category.Category,
            Value = category.ID.ToString()
        });
}
公共静态IEnumerable to SelectListItems
(此IEnumerable categories,int-selectedId)
{
returncategories.OrderBy(category=>category.category)
.选择(类别=>new SelectListItem
{
选定=(category.ID==selectedId),
Text=category.category,
Value=category.ID.ToString()
});
}

享受…

efe——伟大的头脑。我打算用接口而不是基本类来发表我的观点——伟大的头脑。我正要用接口而不是基类来发表我的观点