MVC 5 EnumDropDownListFor实现

时间:2017-04-16 10:38:57

标签: c# asp.net-mvc enums

我需要为项目实现一个下拉框。我用enum类填充它,这是我的

public class Media
{
    public int Id { get; set; }
    public string title { get; set; }
    public string description { get; set; }
    public string tag { get; set; }  
    public TagsEnum TagsEnum { get; set; }
}

和枚举类

public enum TagsEnum
    {
        Ecomomy,
        Latest,
        LocalNews,
        Interesting,
        WorldNews
    }

创建方法

public ActionResult Create([Bind(Include = "Id,title,description,body,VideoLink, Source,tags")] Media media, HttpPostedFileBase file, int id = 0)
        {

            if (ModelState.IsValid)
            {
                if (file != null)
                {
                    file.SaveAs(HttpContext.Server.MapPath("~/Images/")
                                                          + file.FileName);
                    media.ImagePath = file.FileName;
                }
                db.Medias.Add(media);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

这就是问题所在,我的Create查看我的下拉列表工作正常,这是代码:

    <div class="form-group">
        @Html.LabelFor(model => model.tags, "News Category", new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EnumDropDownListFor(model => model.TagsEnum)
            @Html.ValidationMessageFor(model => model.tags)
        </div>
    </div>

但是当我打开一个视图页面MediaMain时,我有一个媒体对象列表,即使我从dorpdown列表中选择了不同的类别,我只显示第一个。这是代码

foreach (var b in Model.media)
{
   ...
    <h5>Category: <a href=@Url.Action("Media", new { id = b.Id })>@Html.Raw(b.TagsEnum)</a></h5>
...
}

我在这里误解了什么,请帮忙。感谢。

1 个答案:

答案 0 :(得分:1)

问题在于如何在控制器操作结果中绑定Media的属性。 Media类有一个属性public TagsEnum TagsEnum { get; set; },它绑定到下拉列表但在操作结果中你没有绑定它:

[Bind(Include = "Id,title,description,body,VideoLink, Source,tags")] Media media

这会导致TagsEnum值不会存储在数据库中,因此当您在媒体列表中检索它时,它只返回枚举的第一个值。您正在使用其他字段,例如VideoLinktags,这些字段根本不属于Media。这些会被忽略,但是如果您希望将TagsEnum分配给media变量,则必须将其添加为:

[Bind(Include = "Id,title,description,body,VideoLink, Source,tags, TagsEnum")] Media media