我正在尝试使用 DropdownListFor
制作下拉列表函数,我想在其中选择一个值。
我搜索了很多,找到了类似的解决方案 SelectList
ViewModel
中的对象,我试过这样的
在我的 ViewModel
我使用了 SelectList
类型的属性像这样
SelectList HoursToSelect = new SelectList(MyDictionaryObject, "Value", "Key", 14/*selected value*/);
我是这样使用它的
@Html.DropDownListFor(m => m.EndsOnHour, HoursToSelect)
这一切都很好,完全满足了我的要求
但问题是由于我的项目架构我不能使用
SelectList
我的对象 ViewModel
因为我的项目不允许在 ViewModel
中使用不可序列化的类.所以留给我的唯一方法就是只在我的 View 中拥有一些东西,这里有一些东西
@Html.DropDownListFor(m => m.EndsOnHour, new SelectList(Model.Hours, "Value", "Key"))
但不知道是什么!
有人有想法来实现这一目标吗?
最佳答案
当您使用 @Html.DropDownListFor(...)
带有对象的属性,它将使用对象的当前状态来设置所选项目。因此,在您的示例中,如果您未在选择列表中指定值,它将使用 m.EndsOnHour
的值。设置选定的值。事实上,选择列表甚至不必是 SelectList
每说,它真的只需要是 SelectListItem
的集合正如您在 documentation 中看到的那样.
但是,您的序列化问题仍然存在。您在这里有几个选项,其中最简单的方法是在 View 端抛出值(如果可能的话)。许多下拉列表是为静态选择而构建的,以显示枚举的可能选择,例如列出州或国家。其他常见示例是日期范围等。在这些情况下,您可以编写帮助程序来生成这些列表并在您的 View 中调用它们,然后只需将它们从您的 View 模型中删除。
然而,如果列表是动态的,从长远来看这不会很好地工作,并且可能会导致额外的耦合,这将对系统的维护产生负面影响。在这种情况下,您需要创建自己的 SelectList
可序列化的子类,然后将其用作 IEnumerable<T>
的可序列化实现的泛型类型参数. C# 中的数组是可序列化的,因此您可以处理该部分。
关于selectlist - asp.net MVC 4.0 下拉列表中的选定值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8927869/