Asp.net mvc 4 在DropDownListFor-mvc4中使用自定义对象类型

Asp.net mvc 4 在DropDownListFor-mvc4中使用自定义对象类型,asp.net-mvc-4,Asp.net Mvc 4,@Html.DropDownListFor需要SelectListItem的列表。有没有办法在此处使用自定义对象而不是选择列表项,并告诉下拉列表值和文本使用自定义对象的哪些属性?或者有没有简单的方法将我的客户对象转换为SelectListItem 我有一个状态对象: 公共字符串状态码{get;set;} 公共字符串StatusCodeDescription{get;set;} 所以现在我必须编写一个for循环,将状态转换为我所有列表的SelectListItem。。。这似乎需要一个更简单的方法

@Html.DropDownListFor
需要SelectListItem的列表。有没有办法在此处使用自定义对象而不是选择列表项,并告诉下拉列表值和文本使用自定义对象的哪些属性?或者有没有简单的方法将我的客户对象转换为SelectListItem

我有一个状态对象: 公共字符串状态码{get;set;} 公共字符串StatusCodeDescription{get;set;}

所以现在我必须编写一个for循环,将状态转换为我所有列表的SelectListItem。。。这似乎需要一个更简单的方法

@Html.DropDownListFor需要SelectListItem的列表。有没有 在此处使用自定义对象而不是选择列表项并告诉 用于自定义对象的属性的下拉列表 值和文本

您可以使用3个参数:一个
IEnumerable
和两个表示自定义类型的值和文本属性名称的字符串:

@Html.DropDownListFor(
    x => x.SelectedStatusCode, 
    new SelectList(
        Model.Satuses, 
        "StatusCode",  
        "StatusCodeDescription"
    )
)
在此示例中,我们假设
Model.Satuses
IEnumerable
类型的属性,其中
StatusViewModel
至少包含两个属性,分别绑定下拉列表的值和文本:

public class StatusViewModel
{
    public string StatusCode { get; set; } 
    public string StatusCodeDescription { get; set; }
    ...
}

太棒了,这回答了问题。总的来说,我理解lamda表达式是如何工作的,但我对这一点感到困惑
x=>x.SelectedStatusCode
此值存储在什么位置:
Model.Application.SelectedStatusCode
?很抱歉,我不理解您的问题。我想我是想说,视图如何知道
x
是什么?它如何知道值
x.SelectedStatusCode
在模型中的位置?是否假定此值与
模型位于同一位置。SelectedStatusCode
?此值来自您在视图顶部声明的模型:
@Model SomeViewModel
。一旦您这样做了,您就可以使用强类型的Html帮助程序,这些帮助程序采用lambda表达式,其中参数是模型。DropDownListFor帮助器的定义如下:
DropDownListFor(这个HtmlHelper html,表达式)
,由于您有一个强类型视图,编译器会推断出泛型参数。好吧,那么据我所知,如果
SelectedStatusCode
值位于
Model.Application.SelectedStatusCode
处,则我将使用
x=>x.Application.SelectedStatusCode
作为第一个参数。谢谢