VB.Net, MVC3, Razor, EF 4.1 DB First и Linq - Заполнение опций и значений DDL - PullRequest
0 голосов
/ 08 июня 2011

Фон - Я пытаюсь заполнить раскрывающийся список информацией о состоянии из базы данных. Мне бы хотелось, чтобы полное имя штата было опцией, а сокращение штата - значением. Пример:

<option value="AL">ALABAMA</option>

Текущий прогресс - Полные имена состояний и сокращения уже существуют в БД. Я успешно заполнил DDL полными именами состояний из БД. Вот код, который я использовал для этого (за исключением вещей, которые я счел несущественными).

Контекст модели (генерируется из шаблона):

Partial Public Class BrokerCRMEntities
    Public Property States() As DbSet(Of State)
End Class

Модель состояния (генерируется из шаблона):

Partial Public Class State
    Public Property StateAbbrev As String
    Public Property StateFull As String
End Class

Контроллер:

Dim db As BrokerCRMEntities = New BrokerCRMEntities
Dim StateList = New List(Of String)()
Dim StateQuery = From d In db.States
                 Order By d.StateFull
                 Select d.StateFull
StateList.AddRange(StateQuery)
ViewBag.State = New SelectList(StateList)

Вид:

@ModelType IEnumerable(Of BrokerCRM.BrokerCRMEntities)
@Html.DropDownList("State", "")

Этот код создает DDL, который содержит полные имена состояний. Пример: * +1022 *

<option>ALABAMA</option>

Вопрос - В дополнение к заполнению полных имен состояний, как я делал выше, я также хотел бы заполнить значение опций выбора в том же DDL с помощью аббревиатур состояний в моей БД / модель. Как это сделать?

Спасибо!

1 Ответ

0 голосов
/ 08 июня 2011

Я бы порекомендовал вам использовать модель представления вместе со строго типизированным представлением и DropDownListFor помощником.Поэтому, как всегда, начните с модели представления:

Public Class StatesViewModel
    Public Property SelectedState As String
    Public Property States As IEnumerable(Of State)
End Class

, затем контроллер:

Public Function Index() As ActionResult
    ' TODO: use ctor DI of the repository
    Dim db = New BrokerCRMEntities()
    Dim model = New StatesViewModel() With { _
        Key .States = db.States.OrderBy(Function(x) x.StateFull) _
    }
    Return View(model)
End Function

и, наконец, представление:

@ModelType IEnumerable(Of StatesViewModel)
@Html.DropDownListFor(
    Function(x) x.SelectedState,
    New SelectList(Model.States, "StateAbbrev", "StateFull")
)
...