MVC5脚手架下载开箱即用

时间:2015-06-14 13:13:37

标签: asp.net-mvc asp.net-mvc-5 poco html.dropdownlistfor asp.net-mvc-scaffolding

我想查看,编辑和创建我的查找关系的下拉列表。

有时它有效,有时它不会。这是一个谜,我希望能在这里明确解决。

这是我的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;
}

这对我不起作用。在查看,编辑或创建产品时,尺寸或颜色都不会显示。我只看到名字字段。

2 个答案:

答案 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>