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
作为第一个参数。谢谢