selectlist - asp.net MVC 4.0 下拉列表中的选定值

标签 selectlist html.dropdownlistfor asp.net-mvc-4

我正在尝试使用 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/

相关文章:

css - 我怎样才能让下拉框与 css 类一起工作?

c# - try catch block 中的代码重复

html - MVC 中的样式下拉列表

jquery - 如何在mvc中填充下拉菜单

javascript - 根据 DropDownList 的值和模型调用 Action 方法

asp.net-mvc-4 - 如何使 ASP.NET MVC Controller 方法异步

asp.net-mvc-4 - 如何在Rotativa.ActionAsPdf中传递值

asp.net-mvc-4 - 使用 mvc 4 创建动态下拉列表

asp.net-mvc - 如何将项目添加到 ASP.net MVC 中的 SelectList