Выпадающий список MVC C # имеет значение предыдущего выбора

#asp.net-mvc #select #view #html.dropdownlistfor #selectlistitem

#asp.net-mvc #выберите #Вид #html.dropdownlistfor #selectlistitem

Вопрос:

Скриншот скрипки C #

https://dotnetfiddle.net/MadhI5

Модель:

 public class IndexViewModel
{
    public List<SelectListItem> Sel { get; set; }
    public string Val1 { get; set; }
    public string Val2 { get; set; }
    public string Val3 { get; set; }
    public string Val4 { get; set; }
    public string Val5 { get; set; }
}
 

Контроллер:

 public ActionResult Index()
{
    var vm = new IndexViewModel();

    vm.Sel = new List<SelectListItem>();
    vm.Sel.Add(new SelectListItem() { Text = "Opt1", Value = "1" });
    vm.Sel.Add(new SelectListItem() { Text = "Opt2", Value = "2" });
    vm.Sel.Add(new SelectListItem() { Text = "Opt3", Value = "3" });

    vm.Val1 = "3";
    vm.Val2 = null;
    vm.Val3 = "1";
    vm.Val4 = null;
    vm.Val5 = "3";

    return View(vm);
}
 

Вид:

 @model HelloWorldMvcApp.IndexViewModel
@{
    Layout = null;
}

@Html.DropDownListFor(m => m.Val1, Model.Sel, "-")
@Html.DropDownListFor(m => m.Val2, Model.Sel, "-")
@Html.DropDownListFor(m => m.Val3, Model.Sel, "-")
@Html.DropDownListFor(m => m.Val4, Model.Sel, "-")
@Html.DropDownListFor(m => m.Val5, Model.Sel, "-")
 

Выбранные значения

  • Val1 : 3 (правильно)
  • Val2 : 3 (должно быть «-«)
  • Val3 : 1 (правильно)
  • Val4 : 1 (должно быть «-«)
  • Val5 : 3 (правильно)

Посмотрите на демонстрацию скрипки. Почему значения Val2 и Val4 не имеют значения null? Это ошибка фреймворка?

Комментарии:

1. Я думаю, вам следует использовать "" вместо null

2. Ваш код должен быть в вопросе. И это не ошибка, это просто способ работы кода (кэширование SelectList ). Вы можете заставить его работать, используя @Html.DropDownListFor(m => m.Val2, new SelectList(Model.Sel, "Value", "Text"), "-")

3. Использование «» вместо null работает, спасибо

Ответ №1:

 ...
vm.Val1 = "3";
vm.Val2 = "";
vm.Val3 = "1";
vm.Val4 = "";
vm.Val5 = "3";
...
 

Использование «» вместо null работает