0

Я относительно новым для MVC, и я немного застрял ....MVC Как создать список из строк в таблице в DbContext

У меня есть 2 модели:

Модель сайта -

SiteID() As Integer 
Name() As String 
Latitude() As Double 
Longitude() As Double 

И модель устройства -

DeviceID() As Integer 
Make() As String 
Model() As String 
Serial() As String 
Site() As Site 

Как вы можете видеть, устройство связано с сайта. То, что я пытаюсь сделать, - это в представлениях «Устройство» для «Создать и редактировать», сделать так, чтобы поле «Место» было DropDownListFor, список которых содержит Сайты, которые существуют в таблице «Место».

Так это то, что я кладу в представлении для создания списка, который будет в выпадающем:

@ModelType TestWebApplication2.Device 
@Code 
    ViewData("Title") = "Create" 

    Dim selectSite As List(Of SelectListItem) 
    Dim listOfSites As IEnumerable(Of TestWebApplication2.Site) 

    For Each item In listOfSites 
     selectSite.Add(New SelectListItem() With {.Value = item.SiteID, .Text = item.Name}) 
    Next 

End Code 

Проблема в том, в строке

для каждого элемента в listOfSites

я получаю зеленый волнистой под listOfSites, и он говорит, «Переменная„listOfSites“используется до того, как было присвоено значение. нуль refere исключение nce может появиться во время выполнения ».

я могу видеть мои таблицы в контексте просто отлично:

Application DB Context

И я предполагаю, что это должно быть сделано таким образом, так как IEnumerable(Of TestWebApplication2.Site) тип модели для представления индекса, который может перебрать For Each просто хорошо.

Так что же мне недостает в спискеOfSites ??

спасибо!

ответ

0

Вопрос заключается в том, что вы объявляете listOfSites как:

Dim listOfSites As IEnumerable(Of TestWebApplication2.Site)

без использования New но другой вопрос в том, что вы, кажется, не заполнять listOfSites прежде чем использовать его либо!

Кстати, вы не можете создать экземпляр своего listOfSites, так как IEnumerable(Of T) - это интерфейс, а не объект.

Возможно, вы заселяете свои объекты в пределах Controller и возвращаете View() с вашими данными.

Чтобы быстро создать контроллер и связанный с видом:

  1. щелкните правой кнопкой мыши папку контроллеров в пределах вашего решения;
  2. Добавить -> Контроллер ...
  3. Выберите контроллер с видом, с помощью Entity Framework
  4. Выберите подходящую модель и контекст данных

Это добавит все для вас - достаточно, чтобы вы начали, по крайней мере!

+0

OK. Тогда для чего должен выглядеть мой код, чтобы сделать это? – Andarta

+0

См. Править для более подробной информации – Ric

+0

Ну, у меня уже был контроллер с представлениями. Поэтому я прокомментировал материал в разделе «Код кода», а в DeviceController это теперь мой Create: «GET: Devices/Create Функция Create() As ActionResult Dim listOfSites = (С сайта В db.Sites Выберите сайт. Name) .ToList() Вид возврата (listOfSites) Конечная функция Но тогда в представлении «сказано, что« listOfSites не объявлен ». – Andarta

0

ОК, после того, как вы играете, я понял.

Мне не нужно было ничего делать в контроллерах.

Это то, что код в разделе кодов Создание зрения устройство выглядит как сейчас:

@ModelType TestWebApplication2.Device 
@Code 
    ViewData("Title") = "Create" 

    Dim selectSite As New List(Of SelectListItem) 
    Dim db = New TestWebApplication2.Models.TestWebApplication2Context 
    Dim listOfSites As List(Of Site) 
    listOfSites = (From site In db.Sites Select site).ToList() 

    For Each item In listOfSites 
     selectSite.Add(New SelectListItem() With {.Value = item.SiteID, .Text = item.Name}) 
    Next 

End Code 

И DropDownListFor использует selectSite в качестве источника элементов в нем.

Это работает сейчас. Единственное, что немного причудливо в том, как выглядят взгляды ... но это должен быть отдельный вопрос, если я не могу понять это.

Спасибо, @Ric, за подсказку относительно заполнения listOfSites.

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

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