使用 ViewModel MVC 填充 DropdownlistFor

Populate DropdownlistFor using ViewModel MVC

在起草这个问题之前,我浏览了一些此类链接,并实现了相同类型的代码块,但无法找出我在做什么错误。

问题。

我有一个包含 2 个列表数据的视图模型,其中一个是我想将其显示到下拉列表控件中的列表。

视图模型

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

这里是按预期工作的代码片段。但不适用于视图模型 class.

@model.ClaimHistory.Models.CategoryModelDum

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

这是下拉列表

以下(小)更改应该有效:

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;