2014-12-17 6 views
1

В последнее время я столкнулся с некоторыми проблемами с использованием DropDownList в ASP.NET MVC. Я хочу сохранить значение выбранного элемента для члена Wydzialy. Извините за не переводить некоторые имена, они не имеет значения, я думаю :)DropDownList MVC возвращает null

Вот что у меня есть:

Вид:

<div class="form-group"> 
    @Html.LabelFor(model => model.Wydzial, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.DropDownListFor(x => x.Wydzial, (List<SelectListItem>)ViewBag.Wydzialy) 
    </div> 
</div> 

Модель:

public class Student 
{ 
    public int Id { get; set; } 
    public int NumerIndeksu { get; set; } 
    public string Imie { get; set; } 
    public string Nazwisko { get; set; } 
    public int Semestr { get; set; } 
    public virtual Wydzial Wydzial { get; set; } 
} 

контроллер :

public ActionResult Create() 
    { 
     var wydzialy = db.Wydzialy.ToList(); 
     var lista = wydzialy.Select(W => new SelectListItem() 
      { 
       Text = W.Nazwa 
      }).ToList(); 
     ViewBag.Wydzialy = lista; 
     return View(); 
    } 
+0

Почему это сочетание между 'Model' и' ViewBag'? У вас должно быть все, что вам нужно в «Модели». – melancia

+0

Вы устанавливаете значение Text в свой SelectListItem, а не его значение. –

+0

Что здесь означает «возврат»? Получаете ли вы null на стороне сервера после отправки формы? В этом случае отправьте код принимающего действия – Andrei

ответ

0

Ваша попытка привязать выпадающий список к сложному объекту. A <Select> только сообщения поддерживают тип значения (в вашем случае текст выбранного варианта).

Либо привязать к свойству Wydzial

@Html.DropDownListFor(x => x.Wydzial.Nazwa, (List<SelectListItem>)ViewBag.Wydzialy) 

или предпочтительно использовать модель представления, которая включает в себя свойство связываться с и SelectList

public class StudentVM 
{ 
    public int Id { get; set; } 
    // Other properties used by the view 
    public string Wydzial { get; set; } 
    public SelectList Wydzialy { get; set; } 
} 

Контроллер

public ActionResult Create() 
{ 
    StudentVM model = new StudentVM(); 
    model.Wydzialy = new SelectList(db.Wydzialy, "Nazwa", "Nazwa") 
    return View(model); 
} 

Посмотреть

@model StudentVM 
.... 
@Html.DropDownListFor(x => x.Wydzial, Model.Wydzialy) 

Обратите внимание, что ссылка на объект Nazwa обязательна. Wydzial. Обычно ou отображает свойство text, но привязывается к свойству идентификатора.

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