MVC Entity Framework DropDownListFor‹›

Я хотел бы следовать лучшим рекомендациям MVC для создания DropList.

У меня есть 3 модели (для этого я их вырезал)

Образцовый студент

public int ID {get;set;}
public string Name {get;set}
public Site SiteID {get;set;}

Вторая модель сайта

public int ID {get;set;}
public string SiteName {get;set}

Модель 3 ВМ

public int ID {get;set}
public student Students {get;set;}

public DateTime Date  { get { return DateTime.Now; } }
public bool Criteria {get;set;}

В моем представлении VM я использую html-помощники EditorFor для заполнения моих моделей VM и Student. Модель сайта предварительно заполняется в базе данных.

Я ищу лучший способ включить выпадающий список сайтов в моем представлении виртуальной машины, который будет отображаться в моей студенческой модели.

Как мне правильно настроить свои модели для достижения этого?


person Robert Kitching    schedule 29.04.2015    source источник
comment
Можете ли вы уточнить свой вопрос, если модель для этого будет использовать все три модели, вы создадите более крупное представление со всеми данными.   -  person Greg    schedule 29.04.2015
comment
На виртуальной машине Model Three я настоятельно рекомендую изменить Date от свойства к методу.   -  person Erik Philips    schedule 29.04.2015


Ответы (2)


Короче говоря, вам нужен DropDownListFor. метод расширения и поместить List<Site> в модель представления.

Вот скрипт, демонстрирующий ваш случай. Скрипка имеет более подробную информацию. Гайки и болты здесь:

ViewModel — добавить List<Site>

public class MyViewModel
{
    public MyViewModel()
    {
        this.Sites = new List<Site>();
    }

    public int ID { get; set;}
    public Student Students { get; set; }

    public DateTime Date  { get { return DateTime.Now; } }
    public bool Criteria { get; set; }      

    public List<Site> Sites { get; set; }
}

Посмотреть – использовать DropDownListFor

@Html.DropDownListFor(m => m.Sites, 
    new SelectList(Model.Sites, "ID", "SiteName"))

В псевдокоде выше сказано

  • Объект Sites в модели содержит свойства для отображения.
  • Создайте новый SelectList, используя объект Sites в модели. Используйте свойство ID в качестве значения данных и свойство SiteName в качестве текста данных.
  • Создайте раскрывающийся список на основе приведенной выше информации.

Контроллер

Это просто передает заполненную модель представления в представление.

public ActionResult Index()
{
    var vm = SeedFromDatabase();
    return View(vm);
}

private MyViewModel SeedFromDatabase()
{
    var vm = new MyViewModel();
    vm.Sites.Add(new Site(0, "one"));
    vm.Sites.Add(new Site(1, "two"));
    vm.Sites.Add(new Site(2, "three"));
    return vm;
}
person Shaun Luttin    schedule 29.04.2015

ViewModel

public class VM
{
    public int ID {get;set}
    public student Students {get;set;}

    public SelectList SiteList {get;set;}
    public int SiteID {get;set;}

    public DateTime Date  { get { return DateTime.Now; } }
    public bool Criteria {get;set;}
}

Загрузить действие представления

public ActionResult LoadVMView(){      
     var model = new VM();

     var items = GetSitesFromDatabase().Select(s => new SelectListItem(){
                        Text = s.SiteName,
                        Value = s.ID.ToString()
                        });
 model.SiteList = new SelectList(items);

      return View(model);
}

Вид:

@Html.DropDownListFor(m => m.SiteID, Model.SiteList)

На почте

[HttpPost]
public ActionResult LoadVMView(VM model){

var selecteSiteID = model.SiteID;
}
person Dawood Awan    schedule 29.04.2015
comment
Это хороший подход, хотя он не строится так, как сейчас. Нужно немного поработать, прежде чем он будет построен. - person Shaun Luttin; 29.04.2015
comment
@ShaunLuttin, ответ просто для того, чтобы показать, как работает DropDownListFor. Это то, что ОП задал в вопросе. - person Dawood Awan; 29.04.2015
comment
Это не строится. Например, вы не можете использовать ToList() для назначения SelectList. - person Shaun Luttin; 29.04.2015
comment
Кроме того, вы не можете неявно преобразовать int в string. - person Shaun Luttin; 29.04.2015
comment
В вашем свойстве отсутствует точка с запятой. - person Shaun Luttin; 29.04.2015
comment
Модель Student имеет свойство ID, а не Id. - person Shaun Luttin; 29.04.2015
comment
Есть и другие ошибки. Когда он будет создан, прокомментируйте еще раз, и я удалю свои существующие комментарии и проголосую за. - person Shaun Luttin; 29.04.2015