Исключение MVC Null для Model передается во ViewModel в View, когда я хочу получить к нему доступ через Model. не @Html

У меня возникла проблема в MVC с моей моделью, которая передается в ViewModel для просмотра. У меня есть база данных с несколькими таблицами, на которых я назвал Entity Framework для создания моделей.

Это моя ViewModel:

namespace BP_final.ViewModels
{
     public class AllDBModels
    {
        public Models.Graph AllGraphs { get; set; }
        public IEnumerable<NAMTAR_STUDYROOMS> Namtar_studyrooms { get; set; }
        public IEnumerable<NAMTAR_STATS_STUDYROOMS> Namtar_stats_studyrooms { get; set; }
        public List<bp_data> bp_data { get; set; }
        public Models.Report reports { get; set; }

        public AllDBModels()
        {
            Namtar_studyrooms = new List<NAMTAR_STUDYROOMS>();
            reports = new Models.Report() { RoomNumber = "1"};
            AllGraphs = new Models.Graph();

        }
    }
}

Я создаю несколько свойств для своих таблиц и инициализирую некоторые из них. Затем в моем контроллере я вызываю мой класс ViewModel, поэтому он должен создать экземпляр:

public ActionResult Index()
    {
        AllDBModels allModels = new AllDBModels();
        allModels.AllGraphs = new Graph();
        allModels.AllGraphs.Charts = new List<Highcharts>();

        ChartsModel model = new ChartsModel();
        model.Charts = new List<Highcharts>();
...
...

return View(allModels);

В моем View я получаю ViewModel, затем я хочу использовать его. Я вызываю DropDownListFor:

@model BP_final.ViewModels.AllDBModels

@{

ViewBag.Title = "Create";

}
<h2>Create</h2>

@using (Html.BeginForm()) 
...
...

    <div class="form-group">
        @Html.LabelFor(model => model.reports.RoomNumber, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10 ">
            @Html.DropDownListFor(model => model.reports.RoomNumber, new SelectList(
/*this fails*/   Model.Namtar_studyrooms.Select(x => new SelectListItem{ Value = x.ID.ToString(), Text = x.NAME }), "Value", "Text", 2
            ), new { @class = "form-control" })
            @Html.ValidationMessageFor(model => model.reports.Graph, "", new { @class = "text-danger" })
        </div>
    </div>

Я хочу заполнить параметры раскрывающегося списка данными из таблицы / модели namtar_studyrooms, но не могу. Он работает для первого выражения labmda, которое берется из @Html (так как model.reports, в то время как model является моей моделью представления), но следующая лямда, которую я использую с Model.Namtar_studyrooms.Select(не работает, и я получаю нулевое исключение для Model. Я посмотрел в Интернете, и, кажется, у меня есть все, как все, и я не могу найти, что не так

1 ответ

Добавьте раскрывающуюся коллекцию в ViewBag.

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

public ActionResult Index()
    {
    AllDBModels allModels = new AllDBModels();
    allModels.AllGraphs = new Graph();
    allModels.AllGraphs.Charts = new List<Highcharts>();

    ChartsModel model = new ChartsModel();
    model.Charts = new List<Highcharts>();
    ViewBag.Rooms = db.namtar_studyrooms.ToList() //the collection here (you should changeit, just an example)
}

Ввиду;

 @Html.DropDownListFor(model => model.reports.RoomNumber, new SelectList(ViewBag.Rooms, "RoomID", "RoomNameForDisplay"), "Select Room for default", new { @class = "form-control" })

Надежда Помогает.

Другие вопросы по тегам