DropDownListFor Helper из универсального IEnumerable <T> - PullRequest
3 голосов
/ 30 марта 2012

У меня есть проект, использующий DDD, и у MvC3 с бритвой в этом проекте есть один универсальный класс Entity:

public class Entity
{

   public long Id{ get; set;}

}

И другой класс:

public class Categories : Entity
{

  public string Name { get; set; }

  public string Description { get; set;}
}

и другие классы, которые наследуются от категорий, например:

 public class VideoCategory : Categories
    {
     // no have aditional proprieties
    }

Необходимо создать Помощник, создающий DropDownList из IEnumerable<Categories>.

У меня есть BaseRepository, который возвращает список любого вида, я бы использовал его для ускорения.

public abstract class BaseRepository<TEntity> where TEntity: Entity
{

protected DbContext DbContext
        {
            get
            {
                return DependencyResolver.Get<IDbContext>() as DbContext;
            }
        }

 public virtual IList<TEntity> GetAll()
        {
            return ((IEnumerable<TEntity>)this.DbSet).Where(x => x.Deleted == false).OrderByDescending(item => item.Id).ToList();
        }

}

и хранилище для каждой сущности, например:

public class VideoRepository : BaseRepository<VideoCategory >
    {
    }

чтобы я мог использовать репозиторий для obeter-списка в общем классе

1 Ответ

3 голосов
/ 30 марта 2012

Вы можете использовать модель вида:

public class MyViewModel
{
    public long SelectedCategoryId { get; set; }
    public IEnumerable<SelectListItem> Categories { get; set; }
}

и затем предположим, что у вас есть коллекция категорий, заполняющая модель представления:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var categories = new[]
        {
            new Categories { Id = 1, Name = "cat 1" },
            new VideoCategory { Id = 2, Name = "cat 2" },
        };

        var model = new MyViewModel
        {
            Categories = categories.Select(x => new SelectListItem
            {
                Value = x.Id.ToString(),
                Text = x.Name
            })
        };
        return View(model);
    }
}

и, наконец, создайте соответствующий раскрывающийся список в представлении:

@model MyViewModel

@Html.DropDownListFor(x => x.SelectedCategoryId, Model.Categories)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...