我是MVC的新手,经过一整天的搜索,我无法让EnumDropDownListFor工作。 所以我使用这个主题在StackOverflow上提出我的第一个问题。
我使用.Net 4.6.1和MVC 5.2.1以及Firefox作为浏览器。
我将我的项目剥离到最低限度,并可以使用以下模型,视图,枚举和控制器重现错误。
MediaTypesController.cs
public ActionResult Create()
{
return View(new MediaTypeModel());
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "mType")] MediaTypeModel mType)
{
if (ModelState.IsValid)
{
return RedirectToAction("Index");
}
return View(mType);
}
Create.cshtml
@model Foo.Models.Media.MediaTypeModel
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>MediaType</h4>
<hr />
<div class="form-group">
@Html.LabelFor(model => model.mType, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EnumDropDownListFor(model => model.mType, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.mType, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
MediaTypeModel.cs
using Foo.DB.Enums;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace Foo.Models.Media
{
public class MediaTypeModel
{
public MediaTypeList? mType { get; set; }
}
}
MediaTypeList.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Foo.DB.Enums
{
public enum MediaTypeList
{
General = 0,
Image = 1,
Audio = 2,
Video = 3,
Office = 4
}
}
启动&#34;创建&#34; - 操作后,我在HTML中获得了正确的表单,甚至正确填充了DropDownList。选项具有正确的数字作为值。 但是在点击&#34; Create&#34; - 按钮后,ModelState.IsValid为false,mType为null。
当我将mType更改为不可为空时,此行为不会更改。另一方面,当我删除mType并添加其他属性时,它工作得很好。所以我认为这个过程一般都是正常的。
提前感谢您的帮助。