I am new to MVC and after searching the whole day, I can't make EnumDropDownListFor working. So I use this topic to ask my first question here at StackOverflow.
I am using .Net 4.6.1 and MVC 5.2.1 with Firefox as browser.
I stripped my project to the bare minimums and could reproduce the error with the following Model, View, Enum and Controller.
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
}
}
After starting the "Create"- action, I get the correct form in HTML and even the DropDownList is populated correctly. The options has the correct numbers as values. But after hitting the "Create"- button, ModelState.IsValid is false and mType is null.
This behaviour does not change, when I change mType to be not nullable. On the other hand, when I remove mType and add other properties, it works just fine. So I think the process in general is working correctly.
Thanks in advance for your help.