使用 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;
在起草这个问题之前,我浏览了一些此类链接,并实现了相同类型的代码块,但无法找出我在做什么错误。
问题。
我有一个包含 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;