如何使用 MVC Html Helper .DropDownListFor<>带有枚举
在我的 MVC 3 Razor 应用程序中,我有一个带有枚举的模型。
模型示例:
public class EmployeeModel
{
public enum Title
{
Accountant = 111,
Sales = 222,
Production = 333
}
[Required]
public string Name {get; set;}
[Required]
public Title JobTitle {get; set;}
}
在我的视图中,我想使用 Html 助手来构建 Html 表单...
视图示例:
@model ..Models.EmployeeModel
@using (Html.BeginForm())
{
@Html.LabelFor(m => m.Name)
@Html.TextBoxFor(m => m.Name)
<br>
@Html.LabelFor(m => m.JobTitle)
@Html.DropDownListFor(m => m.JobTitle, ??How do I get Title enum values??)
<br>
<input type="submit />
}
我尝试的 DropDownListFor 的输出实现看起来像这样: 请注意,选项值与枚举的初始化值相匹配
<select name="JobTitle">
<option value="-1">Choose a Job Title</option>
<option value="111">Accountant</option>
<option value="222">Sales</option>
<option value="333">Production</option>
</select>
如何获取 DropDownListFor<>帮助器根据模型的标题枚举创建选择/选项元素?
另外,是否可以让 DropDownListFor<>帮助程序添加一个额外的(不是枚举的一部分)类似于上面示例中的“选择职位”选项?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您可能会获得一个带有枚举值名称的
String[]
并从中创建一个下拉列表。在视图模型中,添加SelectListItem
类型的属性Titles
并向其中添加枚举值和名称。您可以通过 System.Enum 类型获取名称和值。这有点丑陋,但它会起作用。
You could possibly get a
String[]
with the names of the enum values and create a dropdown from that. In your view model, add a propertyTitles
of typeSelectListItem
and add the enum values and names to that. You can get the names and values through theSystem.Enum
type.It's kind of ugly, but it'll work.
我刚刚偶然发现了这个 StackO 问题/答案 - 我的问题不仅是完全重复的,但 Mike McLaughlin 给出的答案是我见过的使用
DropdownListFor<> 的最佳解决方案 和
Enums
。具体来说,Mike 向我们指出他由 Morgan Leroi 找到的解决方案< /a>Morgan 的快速解决方案是:
但是,Morgan 制作了一个扩展,使带有枚举的
DropDownListFor<>
的实现更加紧凑。您可以在此处下载 Morgan 的 Visual Studio 解决方案。也就是说,我认为我们应该结束这个问题,因为它是完全重复的。
I just stumbled on this StackO question/answer - not only is my question here an exact duplicate, but the answer given by Mike McLaughlin is the best solution I've seen for using
DropdownListFor<>
withEnums
. Specifically, Mike points us to a solution that he found by Morgan LeroiMorgan's quick solution is:
But, Morgan has made an Extension that makes the implementation of the
DropDownListFor<>
with enums even more compact. You can download Morgan's Visual Studio Solution here.That said, I think we should close this question as it's an exact duplicate.
这是解决方案
在 DropDownList 中添加 ViewBag 名称:
Here is the solution
Add ViewBag name in DropDownList :
这是使用 Html Helpers 的方法:
模型
视图
HTML 输出
Here's a way using Html Helpers:
Model
View
HTML Output
封装的 HTML 帮助器扩展可在此处获取:
http ://www.spicelogic.com/Journal/ASP-NET-MVC-DropDownListFor-Html-Helper-Enum-5
源代码快照:
您可以从链接下载该项目的完整源代码。
An encapsulated HTML Helper Extension is available here :
http://www.spicelogic.com/Journal/ASP-NET-MVC-DropDownListFor-Html-Helper-Enum-5
the source code snapshot:
You can download the full source code of the project from the link.
我用这个扩展解决了它:(
我在SO上找到了扩展,但没有默认值)
I solved it with this extension:
(I found the extension on SO, but without the default value)