Заполнить Dropdownlist для использования ViewModel MVC - PullRequest
0 голосов
/ 27 июня 2018

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

Проблема.

У меня есть модель представления, которая содержит 2 списка данных и один из списка, который я хочу отобразить в элементе управления выпадающего списка.

ViewModel

public class ClaimVM
{
  public List<ClaimHistoryModel> claimHistoryModel { get; set; }
  public List<CategoryModelDum> categoryModel { get; set; }
}

CategoryModelDum.cs

public class CategoryModelDum
{
    public string CategoryName { get; set; }
    public Int16 ID { get; set; 
}

В настоящее время я получаю данные для обоих списков и передаю эту модель просмотра из контроллера в VIew (поскольку один из списков работает должным образом).

вот мой код выпадающего списка

@Html.DropDownListFor(m => m.categoryModel.Select(x => x.CategoryName), new SelectList(Model.categoryModel, "ID", "CategoryName"), "Select Category", new { @class = "ddlList" })

, поэтому мне нужно, чтобы данные категории модели отображались в выпадающем списке. но это исключение, говорящее: -

Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions

Я почти уверен, что делаю какую-то глупую ошибку, но любая помощь будет оценена.

ОБНОВЛЕНИЕ - 1

здесь приведен фрагмент кода, который работает как положено. но не с учетом модели класса.

@model.ClaimHistory.Models.CategoryModelDum

 @Html.DropDownListFor(model => model.CategoryName, new SelectList(ViewBag.CategoryType, "ID", "CategoryName", Model.ID), new { @class = "ddlList" })

вот выпадающий список enter image description here

1 Ответ

0 голосов
/ 27 июня 2018

Должны работать следующие (небольшие) изменения:

public class ClaimVM
{
    // will hold the selected category ID
    public Int16? CategoryID { get; set; }

    public List<ClaimHistoryModel> claimHistoryModel { get; set; }
    public List<CategoryModelDum> categoryModel { get; set; }
}

@Html.DropDownListFor(m => m.CategoryID, new SelectList(Model.categoryModel, "ID", "CategoryName"), "Select Category", new { @class = "ddlList" })
// change here -------^^^^^^^^^^^^^^^^^

Для ясности, первый параметр @Html.DropDownListFor здесь, чтобы указать, какое свойство будет связано с выбранным значением.
Следовательно, это должна быть назначаемая переменная.
Вы не можете написать:

Model.categoryModel.Select(x => x.CategoryName) = Model.categoryModel[selectedIndex].ID;

Но вы действительно можете написать:

Model.CategoryID = Model.categoryModel[selectedIndex].ID;
...