2016-07-27 3 views
1

Я использую ASP.NET Core 1.0 и EF Core 1.0 и имею следующий класс кода в моей базе данных SQL.Как заполнить Select taghelper в Razor, используя данные из таблицы базы данных SQL

namespace GigHub.Models 
{ 
    public class Genre 
    { 
    public byte Id { get; set; } 

    [Required] 
    [StringLength(255)] 
    public string Name { get; set; } 
    } 
} 

У меня есть следующий класс ViewModel я использую в форме представления Razor:

namespace GigHub.ViewModels 
{ 
    public class GigFormViewModel 
    { 
    public string Venue { get; set; } 
    public string Date { get; set; } 
    public string Time { get; set; } 
    public List<Genre> Genres { get; set; } 
    } 
} 

У меня также есть этот контроллер:

using GigHub.Data; 
using GigHub.ViewModels; 
using Microsoft.AspNetCore.Mvc; 

namespace GigHub.Controllers 
{ 
    public class GigsController : Controller 
    { 
    private readonly ApplicationDbContext _context; 

    public GigsController(ApplicationDbContext context) 
    { 
     _context = context; 
    } 
    public IActionResult Create() 
    { 
     var vm = new GigFormViewModel(); 

     // Need to get my Genre list from the DbSet<Genre> in my database context injected above 
     // into the GigFormViewModel for the Select taghelper to consume 

     return View(vm); 
    } 
    } 
} 

Я мой взгляд Бритва установить до используйте ViewModel отлично, но я не уверен, как установить код taghelper ниже, чтобы получить доступ к свойству Genre.

<div class="form-group"> 
     <label asp-for="????" class="col-md-2 control-label"></label> 
     <div class="col-md-10"> 
     <select asp-for="????" asp-items="????" class="form-control"></select> 
     <span asp-validation-for="????" class="text-danger" /> 
     </div> 
    </div> 

Я в основном возникают проблемы grokking, как получить мой список жанров из моей базы данных в свойство ViewModel в форме, что Выбрать taghelper АСП-элементы = может потребить. Множество пробных ошибок & ошибок, которые я пережил, обычно приводят к проблемам с конверсиями, идущими от генерических Список <> Тип для MVC SelectListItem Тип. Я подозреваю, что мой класс ViewModel Genre нуждается в настройке, но мои исследования до сих пор приводили только к статьям, охватывающим предыдущие версии ASP.NET и Entity Framework, и я изо всех сил пытаюсь сопоставить их с ядром ASP.NET 1.0 RC2 и EF Core 1.0.

+0

'<выберите осина-для =«ИмяПоля»АСП-элементы =«ViewBag.OptionsCollection»>' –

+0

Неужели нет способа избежать ViewBag и получить список из ViewModel в виде списка для taghelper по строки asp-items = "Model.MyGenreListHere"? Это где я иду не так? –

+0

Просто используйте поле в ViewModel. Я отправлю пример из документации ASP.NET. –

ответ

1

Вы можете использовать asp-for, чтобы указать имя свойства модели для элемента select и asp-items, чтобы указать элементы опции.

<select asp-for="SomeFiles" asp-items="Model.SomeOptions"></select> 

Вы также можете использовать ViewBag.SomeOptions, если вы не хотите, чтобы добавить SomeOptions поданные в режиме.

Для получения дополнительной информации см. Документацию The Select Tag Helper.

Пример

Просмотр

<select asp-for="Country" asp-items="Model.Countries"></select> 

Модель

using Microsoft.AspNetCore.Mvc.Rendering; 
using System.Collections.Generic; 

namespace FormsTagHelper.ViewModels 
{ 
    public class CountryViewModel 
    { 
     public string Country { get; set; } 

     public List<SelectListItem> Countries { get; set; } 
    } 
} 

Контроллер

Метод Index инициализирует CountryViewModel, устанавливает выбранную страну и список стран и передает модель в представление индекса.

public IActionResult Index() 
{ 
    var model = new CountryViewModel(); 
    model.Country = "CA"; 
    model.Countries = db.Countries 
         .Select(x => new SelectListItem { Value = x.Id, Text = x.Name }) 
         .ToList(); 

    return View(model); 
} 
+0

Я тоже проходил этот пример на сайте docs, но я не мог мысленно сопоставить его с моей ситуацией. У меня уже есть список жанров, хранящихся в моей модели домена, в базе данных, поэтому мой ViewModel не должен будет инициализировать эти элементы, «новизируя» их, чтобы их использовать для taghelper. Я надеялся, что в моем контроллере каким-то образом будет использовать свой контекст базы данных, чтобы прочитать значения из моего DbContext и сопоставить их с свойством в моей модели ViewModel, но синтаксис, чтобы избежать проблем с конверсией, ускользает от меня. –

+0

Проверьте отредактированный ответ. Вы можете просто преобразовать данные таблицы в список «List », как показано выше. –

+0

Отлично. Это, похоже, работает и вернуло меня в нужное русло. Кажется, мой «Линк-Фу» может быть лучше. Кажется, мне нужно поднять некоторые учебные пособия Linq, чтобы подключить мои пробелы в знаниях. Большое спасибо. –

 Смежные вопросы

  • Нет связанных вопросов^_^