我想查看,编辑和创建我的查找关系的下拉列表。
有时它有效,有时它不会。这是一个谜,我希望能在这里明确解决。
这是我的POCO查找
public class Color
{
public int Id { get; set; }
public string Value {get;set;}
}
//Red,White,Blue
public class Size
{
public int Id { get; set; }
public string Value { get; set; }
}
//S,M,L
这是主要的对象,我希望将颜色和尺寸的下拉式脚手架开箱即用。
public class Product
{
public int Id;
public string Name;
public virtual Color Color;
public virtual Size Size;
}
这对我不起作用。在查看,编辑或创建产品时,尺寸或颜色都不会显示。我只看到名字字段。
答案 0 :(得分:2)
默认情况下,大小和颜色是延迟加载的(虚拟),因此您需要急切地加载它们:
var products = context.Products.Include(p => p.Color).Include(p => p.Size).ToList();
https://msdn.microsoft.com/en-us/data/jj574232.aspx
如果您的问题与下拉菜单有关,则需要在控制器中编写一个包含列表项的视图模型,将其发送到您的视图并使用DropDownListFor(m => m.ColorId,m.Colors)。您可能需要将ColorId和SizeId添加到产品型号中。这是一个很好的解释:http://odetocode.com/blogs/scott/archive/2013/03/11/dropdownlistfor-with-asp-net-mvc.aspx
答案 1 :(得分:0)
只需更改:
public class Color
{
public int Id { get; set; }
public string Value {get;set;}
public ICollection<Product> Products {get;set;}
}
//Red,White,Blue
public class Size
{
public int Id { get; set; }
public string Value { get; set; }
public ICollection<Product> Products {get;set;}
}
还有您的主要对象
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
[ForeignKey("Color")]
public int Color_Id { get; set; }
public virtual Color Color { get; set; }
[ForeignKey("Size")]
public int Size_Id { get; set; }
public virtual Size Size { get; set; }
}
然后,只需使用创建或编辑模板添加一个脚手架视图,VS就会像这样生成DDL:
<div class="form-group">
@Html.LabelFor(model => model.Color_Id, "Color_Id", htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("Color_Id", null, htmlAttributes: new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.Color_Id, "", new { @class = "text-danger" })
</div>
</div>