Заполните DropdownList с помощью EF Core (из другой модели) - PullRequest
1 голос
/ 05 января 2020

У меня 2 класса. Photos и Albums Мне нужно включить названия альбомов в мои фотографии / создать вид и создать выпадающие списки для названий альбомов.

Модель в моем представлении фотографии / создать: ImageViewModel

Как я могу получить это?

public class Album
{
    public int Id { get; set; }

    [Required]
    [MinLength(5), MaxLength(100)]
    public string Name { get; set; }

    private DateTime? dateCreated = null;
    public DateTime CreatedOn
    {
        get => dateCreated.HasValue ? this.dateCreated.Value : DateTime.Now;
        set => this.dateCreated = value;
    }

    public virtual List<PhotoAlbums> PhotoAlbums { get; set; }
}

public class PhotoAlbums
{
    public int PhotoId { get; set; }
    public Photo Photo { get; set; }
    public int AlbumId { get; set; }
    public Album Album { get; set; }
}

public  class Photo
{
    public int Id { get; set; }
    public byte[] Picture { get; set; }
    public string Name { get; set; }   
    public string AlbumNames { get; set; }

    public virtual List<PhotoAlbums> PhotoAlbums { get; set; }
}


public class ImageViewModel
{
    private readonly IUnitOfWork _unitOfWork;
    public ImageViewModel()
    {
        _unitOfWork = new UnitOfWork<ApplicationDbContext>();
    }
    public int Id { get; set; }
    public string FileName { get; set; }
    public byte[] ImageData { get; set; }

    public string File { get; set; }

    public string Albumname { get; set; }
    public string ImageSrc
    {
        get
        {
            string base64 = Convert.ToBase64String(ImageData);
            string imgSrc = String.Format("data:image;base64,{0}", base64); //"data:image/png;base64,{0}"
            return imgSrc;
        }
    }
}

Ответы [ 3 ]

1 голос
/ 06 января 2020

Вот как я бы создал выпадающий список альбомов. Удачи.

Попробуйте добавить IEnumerable<SelectListItem> в ImageViewModel для вашего DropdownList альбомов.

public class ImageViewModel
{
    private readonly IUnitOfWork _unitOfWork;
    public ImageViewModel()
    {
        _unitOfWork = new UnitOfWork<ApplicationDbContext>();
    }
    public int Id { get; set; }
    public string FileName { get; set; }
    public byte[] ImageData { get; set; }

    public string File { get; set; }

    public string Albumname { get; set; }
    public string ImageSrc
    {
        get
        {
            string base64 = Convert.ToBase64String(ImageData);
            string imgSrc = String.Format("data:image;base64,{0}", base64); //"data:image/png;base64,{0}"
            return imgSrc;
        }
    }

    public int AlbumId{ get; set; }
    public IEnumerable<SelectListItem> Albums { get; set; } //you dropdown
}

Затем в вашем контроллере увлажните DropdownList of Albums.

List<Album> albums = null; //get your albums from _context
var model = new ImageViewModel();
model.Albums = new SelectList(albums, "Id", "Name");
//hydrate the rest of your model..

Наконец, в вашей модели отобразите DropdownList of Albums.

@Html.DropDownListFor(model => model.AlbumId, Model.Albums })
0 голосов
/ 06 января 2020

Вы можете просто использовать ViewBag для передачи данных с контроллера для просмотра. Предположим, у вас есть таблица Albums в вашем dbContext:

public DbSet<Album> Albums{ get; set; }

1.Создать действие:

public class PhotosController : Controller
{
    private  ApplicationDbContext _context { get; set; }
    publicPhotosController(ApplicationDbContext context)
    {
        _context = context;
    }

    public IActionResult Create()
    {
        var model = new ImageViewModel();
        ViewBag.AlbumList = _context.Albums.ToList();
        return View(model);
    }
}

2.Создать представление:

@model ImageViewModel
@*other view code*@

@Html.DropDownListFor(model => model.Albumname , new SelectList(ViewBag.AlbumList,"Name","Name"))
0 голосов
/ 05 января 2020

Добавить модель на странице просмотра:

  @model IEnumerable<ImageViewModel>

, затем создать DropDown:

<select id="dropdowntipo">
    <option value="0">Select Item</option>

    @{
      foreach(var item in Model)
      {
        <option value= "@item.Value">@item.DisplayText</option>
      }
    }

</select>
...