【问题标题】:Use Custom object type in DropDownListFor - MVC 4在 DropDownListFor 中使用自定义对象类型 - MVC 4
【发布时间】:2013-03-30 06:00:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: asp.net-mvc-4


    【解决方案1】:

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

    您可以使用带有 3 个参数的 SelectList constructor:一个 IEnumerable<T> 和 2 个表示自定义类型的值和文本属性名称的字符串:

    @Html.DropDownListFor(
        x => x.SelectedStatusCode, 
        new SelectList(
            Model.Satuses, 
            "StatusCode",  
            "StatusCodeDescription"
        )
    )
    

    在本例中,我们假设Model.SatusesIEnumerable<StatusViewModel> 类型的属性,其中StatusViewModel 包含至少2 个属性,分别绑定下拉列表的值和文本:

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

    【讨论】:

    • 太棒了,回答了这个问题。一般来说,我了解 lamda 表达式的工作原理,但我对此感到困惑。 x => x.SelectedStatusCode这个值是什么存储在:Model.Application.SelectedStatusCode
    • 对不起,我不明白你的问题。
    • 我想我想说的是,视图怎么知道x 是什么?它如何知道x.SelectedStatusCode 值在模型中的哪个位置?是不是假设这个值和Model.SelectedStatusCode在同一个位置?
    • 这来自您在视图顶部声明的模型:@model SomeViewModel。一旦你这样做了,你就可以使用强类型的 Html 助手,它采用 lambda 表达式,其中参数是模型。 DropDownListFor 帮助器的定义如下:DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> html, Expression<Func<TModel, Tproperty>> expression),并且由于您有一个强类型视图,所以通用参数由编译器推断。
    • 好的,那么据我了解,如果SelectedStatusCode 值位于Model.Application.SelectedStatusCode,那么我将使用x => x.Application.SelectedStatusCode 作为第一个参数`。谢谢!
    猜你喜欢
    • 2013-08-13
    • 2017-06-18
    • 1970-01-01
    • 2012-01-20
    • 2012-10-04
    • 1970-01-01
    • 2013-07-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多