Как создать пустую модель для перехода в представление вставки-обновления, если в dbcontext больше, чем на модели? - PullRequest
0 голосов
/ 23 апреля 2019

Мне нужно создать пустую форму для обновления базы данных. В контроллере это называется: public ViewResult Create() => View("Edit", new List());

<TargetFramework>netcoreapp2.2</TargetFramework>
I have a class MeetingListContext : DbContext that has 3 models:
1. DbSet List
2. DbSet ATime (Look up table to show time name instead of time id)
3. DbSet DOW (Look up table to show day name instead of day id)

Модель

namespace DEIGList.Models
{
    public partial class MeetingListContext : DbContext
    {
        public MeetingListContext()
        {
        }

        public MeetingListContext(DbContextOptions<MeetingListContext> options)
            : base(options)
        {
        }

        public virtual DbSet<ATime> ATime { get; set; }
        public virtual DbSet<Dow> Dow { get; set; }
        public virtual DbSet<List> List { get; set; }

Вид:

@model DEIGList.Models.MeetingListContext

В контроллере:

 public ViewResult Create() => View("Edit", new List());

Ожидаемым результатом будет форма с пустыми полями данных для заполнения данных. Я хотел бы иметь возможность использовать выпадающие списки для дня и времени.

Но когда я использую @model DEIGList.Models.MeetingListContext, я получаю:

InvalidOperationException: The model item passed into the ViewDataDictionary is of type 'DEIGList.Models.List', but this ViewDataDictionary instance requires a model item of type 'DEIGList.Models.MeetingListContext'.

Предложение

Ответы [ 2 ]

0 голосов
/ 24 апреля 2019

Ваш пост указал мне на решение.Решением было сделать выбор с идентификатором == 0.

var list = _context.List
     .Where(l => l.ListId == 0)
     .Include(t => t.ATime)
     .Include(d => d.Dow)
     .ToList();
 ViewBag.thelist = list;

 return View("Edit", new List());
0 голосов
/ 23 апреля 2019

Вам нужно изменить с @model DEIGList.Models.MeetingListContext

до @model DEIGList.Models.List

Тип @model должен совпадать с типом модели в View("Edit", new List())

Обновление:

Если вы хотите иметь выпадающий список для дня и времени, вам необходимо обновить контроллер:

public ViewResult Create() {
    MeetingListContext ctx = new MeetingListContext();
    ViewBag.ATime = ctx.ATime.ToList();
    ViewBag.Dow  = ctx.Dow.ToList();
    return View("Edit", new List());
}

Добавление раскрывающегося помощника в представлении:

@Html.DropDownList("ATime", new SelectList(ViewBag.ATime, "ATimeID", "ATimeName"))
@Html.DropDownList("Dow", new SelectList(ViewBag.Dow, "DowID", "DowName"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...