mvc4如何在视图中有多个模型的同时获取html助手的具体数据

时间:2014-07-09 08:50:06

标签: asp.net-mvc asp.net-mvc-4

代码是:

模型

使用实体框架工作在数据库中显示2个表并将它们放入模型中

public class UserDb : DbContext
{
    public DbSet<UserItems> Users { get; set; }
    public DbSet<ProductItems> Products { get; set; }
}

[Table("db_user")]
public class UserItems
{
    [Display(Name="User Name")]
    public string name { get; set; }

    [Display(Name="E-mail")]
    public string email { get; set; }
}

[Table("Products")]
public class ProductItems
{
    [Display(Name="Product Name")]
    public string name { get; set; }

    [Display(Name="Product Number")]
    public int number { get; set; }
}

public class DbCombine
{
    public IEnumerable< UserItems> UserItems { get; set; }
    public IEnumerable< ProductItems> ProductItems { get; set; }
}

控制器 将表格传递给表格&#39;列表到视图。

public ActionResult testingView()
    {
        var model = new DbCombine
        {
            ProductItems = db.Products.ToList(),
            UserItems = db.Users.ToList()
        };
        return View(model);
    }

查看

@model MVCselfcode.Models.DbCombine

<div>@Html.EditorFor(m=>m.UserItems*.name*)</div>

问题是,我无法获得强类型的详细数据,例如视图中的代码,.name之后无法m=>m.UserItems

错误消息是&#34;此模型不包含“&#39; name&#39;认定中&#34;

我如何使用强类型?或者我应该改变方法来组合表格。

2 个答案:

答案 0 :(得分:0)

你所拥有的东西没有意义。 UserItems集合,这意味着它包含多个UserItems个实体。问题是您要引用Model.UserItems集合中的哪个项目。

例如,你是否想要枚举集合并为每个项目生成一个div:

@foreach(var item in Model.UserItems)
{
    <div>@Html.EditorFor(m => item.name)</div>
}

答案 1 :(得分:0)

UserItems的类型为IEnumerable<UserItems>IEnumerable<T>没有名为name的属性。对象的每个实例都具有该属性,但对象的集合不具有该属性。

您尝试编辑集合中的哪个元素?

为了让HTML助手识别您想要的属性,您需要为其提供该属性的实例:

@Html.EditorFor(m=>m.UserItems.First().name)

如果集合为空,这可能直观地看起来会引发异常,但它实际上并没有调用First()的调用。这只是允许框架反映到First()返回的类型的定义中,以便它可以构建生成的HTML。

如果您实际上想要编辑记录,则可能需要为UserItems类型创建自定义编辑器并迭代UserItems属性以显示编辑器每一个人。此外,为避免混淆,我建议不要使用完全相同的名称命名复数属性和单数类。也许该类应该被称为UserItem