使用EnumDropDownListFor模型时无效

时间:2017-01-10 10:41:21

标签: c# asp.net-mvc

我是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并添加其他属性时,它工作得很好。所以我认为这个过程一般都是正常的。

提前感谢您的帮助。

0 个答案:

没有答案