填充下拉列表供使用ViewModel MVC

时间:2018-06-27 08:05:37

标签: c# asp.net-mvc html.dropdownlistfor

在提出此问题之前,我先经过一些此类链接,并实现了相同类型的代码块,但无法找出我在做什么错误。

问题。

我有一个视图模型,其中包含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" })

所以我需要categorymodel数据显示在下拉列表中。但这抛出了异常,说:-

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 :(得分:1)

以下(小的)更改应该起作用:

onclick="location.href='http://eventmad.dk/?product_cat=dhl'

为清楚起见,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;