代码是:
模型
使用实体框架工作在数据库中显示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;
我如何使用强类型?或者我应该改变方法来组合表格。
答案 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
。