我需要为项目实现一个下拉框。我用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>
...
}
我在这里误解了什么,请帮忙。感谢。
答案 0 :(得分:1)
问题在于如何在控制器操作结果中绑定Media
的属性。 Media
类有一个属性public TagsEnum TagsEnum { get; set; }
,它绑定到下拉列表但在操作结果中你没有绑定它:
[Bind(Include = "Id,title,description,body,VideoLink, Source,tags")] Media media
这会导致TagsEnum
值不会存储在数据库中,因此当您在媒体列表中检索它时,它只返回枚举的第一个值。您正在使用其他字段,例如VideoLink
或tags
,这些字段根本不属于Media
。这些会被忽略,但是如果您希望将TagsEnum
分配给media
变量,则必须将其添加为:
[Bind(Include = "Id,title,description,body,VideoLink, Source,tags, TagsEnum")] Media media