2016-05-12 5 views
-1

У меня возникла проблема с MVC с моей моделью, которая передается в ViewModel для просмотра. У меня есть база данных с несколькими таблицами, на которых я называл структуру сущности для создания моделей.MVC Исключение Null для модели, прошедшей в ViewModel для просмотра, когда я хочу получить ее через Model. not @Html

Это мой 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); 

На мой взгляд, я получаю 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.Namtar_studyrooms.Select (не работает, и я получаю null исключение в Model. Я посмотрел в Интернете, и я, кажется, есть все, как и все остальные, и я не могу показаться, чтобы найти то, что является неправильным

+0

Пойдите посмотреть это ... http://stackoverflow.com/a/33327821/3777098 – alikuli

+0

Код, который вы показали, не будет вызывать эту ошибку, хотя то, что было показано yu, не имеет смысла, потому что 'Namtar_studyrooms' является пустым и не будет отображаться никаких параметров. И добавление последнего параметра ('2') в конструкторе' SelectList' бессмысленно (его игнорируют, поскольку его значение 'reports.RoomNumber' определяет то, что выбрано. –

ответ

0

Добавить коллекцию выпадающий в 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) 
} 

в View ;

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

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