C# 使用ViewModel MVC填充DropDownList

C# 使用ViewModel MVC填充DropDownList,c#,asp.net-mvc,html.dropdownlistfor,C#,Asp.net Mvc,Html.dropdownlistfor,在起草这个问题之前,我浏览了一些此类链接,并实现了相同类型的代码块,但无法找出我犯了什么错误 问题。 我有一个视图模型,它包含两个列表数据,其中一个是我想在dropdownlist控件中显示的列表 视图模型 public class ClaimVM { public List<ClaimHistoryModel> claimHistoryModel { get; set; } public List<CategoryModelDum> categoryModel

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

问题。

我有一个视图模型,它包含两个列表数据,其中一个是我想在dropdownlist控件中显示的列表

视图模型

public class ClaimVM
{
  public List<ClaimHistoryModel> claimHistoryModel { get; set; }
  public List<CategoryModelDum> categoryModel { get; set; }
}
目前,我正在接收两个列表的数据,并将此viewmodel从控制器传递到视图(因为其中一个列表按预期工作)

这是我的下拉列表代码

@Html.DropDownListFor(m => m.categoryModel.Select(x => x.CategoryName), new SelectList(Model.categoryModel, "ID", "CategoryName"), "Select Category", new { @class = "ddlList" })
所以我需要在dropdownlist上显示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.CategoryModel

 @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 -------^^^^^^^^^^^^^^^^^
但你确实可以写:

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

您的模型需要绑定到一个属性,例如
public int SelectedCategory{get;set;}
(并且它还应该有一个
IEnumerable
属性作为选项。请参阅生成和绑定
m=>m.categoryModel的典型代码。选择(x=>x.CategoryName)
Html.DropDownListFor的第一个参数应该类似于
m=>m.SelectedCategory
,并且您的模型应该有一个属性
public int SelectedCategory{get;set;}
正如Stephen MueckeNo所说,你确定它是这样工作的吗?因为我有同一类型的同一个模型,它可以正常工作,请检查Update-1。只要看第一个参数,你的工作代码中有
model=>model.CategoryName
m=>m.categoryModel.Select(x=>x.CategoryName)
在您的非工作代码中。看到区别了吗?要清楚,我没有说您不应该使用
公共列表categoryModel{get;set;}
在您的模型中,您不应该将其用于
选择列表
部分。我说您应该有一个额外的属性来保存所选值,就像您在工作代码中所做的那样。因此,我必须使用另一个属性来处理此列表?或者是否有方法可以从视图中删除选择列表并将数据绑定到dropdownlist fromm现有模型?原因,目前我正在控制器中获取所需的适当数据,我不想修改该设计。我有一个问题,CategoryID属性与任何类或列表无关,它如何链接到我需要的对象?我将在同一页面中有多个dropdownlist,因此视图模型中有多个模型,所以我应该确定吗eep此类别ID common或我可以为所有下拉列表模型使用相同的ID吗?@Manjuboyz这取决于您想对下拉列表执行什么操作。如果您不想将所选值绑定到变量,那么您可能应该尝试查找
@Html.DropDownList
,而不是
@Html.DropDownListFor
?是的,我将有多个e dropdownlist在同一视图中,应该根据另一个下拉选择弹出数据,因此我不知道使用哪一个。希望你能回答这个问题。使用dropdownlist或dropdownlist for好吗?是的,将浏览这些控件的博客。
dropdownlist for
如果你必须通过所选的v控制器的值。如果只使用选定的值(比如javascript),那么
DropDownList
就足够了
Model.categoryModel.Select(x => x.CategoryName) = Model.categoryModel[selectedIndex].ID;
Model.CategoryID = Model.categoryModel[selectedIndex].ID;