我注意到在我看来asp.net MVC中的一个错误,或者只是我做错了什么.我目前正在使用1.0,所以这可能会在2.0版本中得到解决.但不管怎样,我们走了.
当我的视图模型具有与下拉列表的声明ID同名的属性时,将忽略所选项,并且渲染的html没有选择任何内容.不确定我是否做错了,但更改ID的名称可以解决问题.我简化了这个例子,希望很清楚,否则请告诉我.
这是我的视图,其中声明的ID与模型中的列表名称相同:
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<%= Html.DropDownList("IsMultipleServicers", Model.IsMultipleServicers) %>
</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
和渲染的Html
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<select id="IsMultipleServicers" name="IsMultipleServicers">
<option value="false">No</option>
<option value="true">Yes</option>
</select>
</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
现在让我们做一个小改动.我将更改声明的id为不同的东西.
这是我的观点:
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<%= Html.DropDownList("MultipleServicers", Model.IsMultipleServicers) %>
</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
现在渲染的html:
<table border="0" cellpadding="0" cellspacing="0">
<tr>
<td>
<select id="IsMultipleServicers" name="IsMultipleServicers">
<option value="false">No</option>
<option selected="selected" value="true">Yes</option>
</select>
</td>
</tr>
</table>
Run Code Online (Sandbox Code Playgroud)
请注意,现在我得到一个选定的选项,它将是List中的第二个元素.
这是我的ViewModel只是将所有内容联系在一起:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using …
Run Code Online (Sandbox Code Playgroud) 如何为枚举创建默认编辑器模板?我的意思是:我可以做这样的事情:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Enum>" %>
<% -- any code to read the enum and write a dropdown -->
Run Code Online (Sandbox Code Playgroud)
并将其放在EditorTemplates文件夹下的名称下Enum.ascx
?
这是我尝试过的问题的解决方法,但这不是我需要的.
这是我的枚举:
public enum GenderEnum
{
/// <summary>
/// Male
/// </summary>
[Description("Male Person")]
Male,
/// <summary>
/// Female
/// </summary>
[Description("Female Person")]
Female
}
Run Code Online (Sandbox Code Playgroud)
我制作了一个名为的模板GenderEnum.acsx
并将其放入Shared/EditorTemplates
文件夹中.这是模板:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<AlefTech.HumanResource.Core.GenderEnum>" %>
<%@ Import Namespace="AlefTech.HumanResource.WebModule.Classes" %>
<%=Html.DropDownListFor(m => m.GetType().Name, Model.GetType()) %>
Run Code Online (Sandbox Code Playgroud)
当然这个方法是我自己的:
public static class HtmlHelperExtension
{
public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, …
Run Code Online (Sandbox Code Playgroud) 在我的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;}
}
Run Code Online (Sandbox Code Playgroud)
在我的视图中,我想使用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 />
}
Run Code Online (Sandbox Code Playgroud)
我试图实现的DropDownListFor的输出如下所示: 注意选项值与枚举的初始化值匹配
<select name="JobTitle">
<option value="-1">Choose a Job Title</option>
<option value="111">Accountant</option>
<option value="222">Sales</option> …
Run Code Online (Sandbox Code Playgroud) asp.net-mvc html-helper html.dropdownlistfor razor asp.net-mvc-3
在我的MVC表单上,我需要将一个下拉框绑定到我的ViewModel上的枚举.我发现这样做的最好方法在这里描述.
它似乎首先工作,但现在我已经在我的表单中添加了验证,我发现它没有绑定回ViewModel.
这是我的剃刀代码:
<div class="editor-field">
@Html.DropDownListFor(model => model.response,
new SelectList(Enum.GetValues(typeof(Vouchers.Models.ResponseType))),
"Please Select")
</div>
Run Code Online (Sandbox Code Playgroud)
这是我对该领域的视图模型定义:
[DisplayName("Response")]
[Range(1, int.MaxValue, ErrorMessage = "You must select a response before submitting this form.")]
public ResponseType response { get; set; }
Run Code Online (Sandbox Code Playgroud)
问题是我无法提交表格; 即使从我的下拉列表中选择响应后,也会显示Range属性的Validation错误消息,并且客户端验证会阻止表单提交.
我相信这是因为下拉列表的SelectList只包含枚举的字符串名称,而不包含基础整数值.
我怎么解决这个问题?
我该如何调用此功能?
public static HtmlString DropdownForEnum<TModel>(this HtmlHelper<TModel> helper, Type type,
string name, string optionLabel, object htmlAttributes)
Run Code Online (Sandbox Code Playgroud)