【问题标题】:MVC 5 EnumDropDownListFor implementationMVC 5 EnumDropDownListFor 实现
【发布时间】:2017-04-16 10:38:57
【问题描述】:

我需要为项目实现一个下拉框。我使用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>
...
}

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

【问题讨论】:

    标签: c# asp.net-mvc enums


    【解决方案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
    

    【讨论】:

    • 谢谢,我正在使用这些字段,我刚刚删除了它们以缩短课程,但是你有一个好点,我会尽快将其添加到媒体课程中。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 2013-11-25
    • 2014-02-18
    • 1970-01-01
    • 2021-08-16
    • 2015-10-20
    • 2018-10-24
    • 2021-08-08
    • 1970-01-01
    相关资源
    最近更新 更多