当我使用simle模型并在视图示例中传递模型的副本时 - 一切运行良好。
控制器中的
AdvertisingStructure mc = context.AdvertisingStructures.Single(a => a.Id_show == id);
if (mc == null)
{
return HttpNotFound();
}
return View(mc);
在视图中
@model Sciencecom.Models.AdvertisingStructure
@Html.DropDownListFor(a => a.Owner.Id, new SelectList(owners, "id", "Name"))
所选列表的值
但是我在复杂对象中插入了这个模型,并在视图示例中传递了一个新的copy-html.dropdownlist停止工作(未选择列表的值)
新模式
public class CompositeModelForEdit
{
public AdvertisingStructure Structure;
public IEnumerable<Side> Sides;
public IEnumerable<Surface> Surfaces;
}
控制器中的
AdvertisingStructure mc = context.AdvertisingStructures.Single(a => a.Id_show == id);
List<Surface> surfaces=new List<Surface>();
foreach (var sides in mc.Sides)
{
foreach (var surface in sides.Surfaces)
{
surfaces.Add(surface);
}
}
return View(new CompositeModelForEdit() { Sides = mc.Sides, Structure = mc,Surfaces = surfaces});
在视图中
@model CompositeModelForEdit
@Html.DropDownListFor(a => a.Structure.Owner.Id, new SelectList(owners, "id", "Name"))
有什么想法(字段输入显示值)?
答案 0 :(得分:0)
您的模型不同,但在SelectList中您使用相同的属性 - Id,Name。我猜你的 AdvertisingStructure 类包含这些属性,但 CompositeModelForEdit 却没有。
编辑: 首先,不要使用这种复杂的视图模型,使用更简单的东西,例如:
public class OwnerViewModelForEdit
{
public int OwnerId { get; set; }
public string Name { get; set; }
//....
}
然后在您的GET操作中,您可以定义要在下拉列表中显示的项目列表:
IEnumerable<SelectListItem> ownersList =
owners.Select(o => new SelectListItem() {Value = o.Id.ToString(), Text = o.Name});
ViewBag.Owners = ownersList;
return View(new OwnerViewModelForEdit(.........))
最后,在视图中定义您的下拉列表:
@Html.DropDownListFor(o => o.OwnerId, (IEnumerable<SelectListItem>)ViewBag.Owners)
然后在你的POST动作中将viewmodel数据绑定到你自己的所有者模型,你就完成了。
关于mvc下拉列表,Stackoverflow上有很多答案。如果你搜索一下,你会发现更好的建议。