2014-11-25 2 views
0

Допустим, моя база данных содержит справочную таблицу, которая отображает значения Zebra, Goat и Dog на клавиши 0, 1 и 2 и DropDownList, в котором пользователь может выбрать один из них значения.дисплей значение ViewModel с @ Html.DropDownListFor

@Html.DropDownListFor(
    m => m.Animal, 
    new SelectList(
     new List<Object>{ 
      new {value = 0, text = "Zebra"}, 
      new {value = 1, text = "Goat"}, 
      new {value = 2, text = "Dog"} 
     }, 
     "value", 
     "text" 
    ), 
    new { @class = "form-control" } 
) 

После выбора пользователя сохраняется в базе данных, я пытаюсь выяснить способ, чтобы отобразить значение для m => m.Animal. Он сохраняется как 2, но я хочу, чтобы отображаемый текст читался Dog. Как установить выбранное по умолчанию значение на @ Html.DropFownListFor, равное выбору пользователя (например, 2), поэтому выбранный элемент отображает текст Dog?

ответ

2

Я вижу два возможных значения для вашего вопроса, поэтому, я думаю, я просто прикрою их обоих.

Если вы говорите о том, чтобы сделать раскрывающийся список подходящим выбранным значением, Razor должен позаботиться об этом для вас. Тем не менее, тот факт, что вы определяете фактический объект SelectList, без указания параметра selectedValue, может мешать. Технически DropDownListFor нужно только IEnumerable<SelectListItem>, а не фактическое SelectList, и это, как правило, лучше, чтобы передать его бывший, как это проще и менее подвержен ошибкам:

@Html.DropDownListFor(
    m => m.Animal, 
    new List<SelectListItem> { 
     new SelectListItem { Value = "0", Text = "Zebra" }, 
     new SelectListItem { Value = "1", Text = "Goat" }, 
     new SelectListItem { Value = "2", Text = "Dog" } 
    }, 
    new { @class = "form-control" } 
) 

Если, однако, вы говорите о том, как перевести значение 2 в Dog в какой-то более поздний момент вашего кода, вы должны на самом деле использовать что-то вроде перечисления. Например:

public enum Animals 
{ 
    Zebra = 0, 
    Goat = 1, 
    Dog = 2 
} 

Затем измените Animal свойство быть такого типа:

public Animals Animal { get; set; } 

Наконец, и так как вы работаете MVC5, вы можете просто использовать:

@Html.EnumDropDownListFor(m => m.Animal, new { @class = "form-control" }) 

Вам даже не нужно передавать список параметров, потому что помощник просто получит их из перечисления, на которое набирается свойство Animal.

Затем, когда вы хотите, чтобы отобразить выбранный тип животных, вы просто использовать:

@Html.DisplayFor(m => m.Animal) 

И Dog или независимо от того, что установлен в будет выводиться автоматически.

+0

Спасибо за подробное объяснение. '@ Html.DropDownListFor' странно пугает и трудно подходит. Я решил решить эту проблему, установив для выделенногоValue значение '@ Html.ValueFor (m => m.Animal)', но этот ответ действительно помогает мне понять, как правильно подойти к @ Html.DropDownListFor правильно. – alex

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