开箱即用的 MVC5 脚手架下拉菜单
MVC5 Scaffolding Dropdowns Out the Box
我想查看、编辑和创建我的查找关系的下拉列表。
有时这行得通,有时行不通。一直是个谜,希望能在这里彻底解开。
这是我用于查找的 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;
}
这对我不起作用。在查看、编辑或创建产品时,尺寸或颜色均未显示。我只看到名称字段。
默认情况下尺寸和颜色是延迟加载的(虚拟的)所以你需要提前加载它们:
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 添加到您的 Product 模型中。这里有一个很好的解释:http://odetocode.com/blogs/scott/archive/2013/03/11/dropdownlistfor-with-asp-net-mvc.aspx
改成这样:
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>
我想查看、编辑和创建我的查找关系的下拉列表。
有时这行得通,有时行不通。一直是个谜,希望能在这里彻底解开。
这是我用于查找的 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;
}
这对我不起作用。在查看、编辑或创建产品时,尺寸或颜色均未显示。我只看到名称字段。
默认情况下尺寸和颜色是延迟加载的(虚拟的)所以你需要提前加载它们:
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 添加到您的 Product 模型中。这里有一个很好的解释:http://odetocode.com/blogs/scott/archive/2013/03/11/dropdownlistfor-with-asp-net-mvc.aspx
改成这样:
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>