【发布时间】:2017-07-12 20:48:04
【问题描述】:
我对这篇 Rachel Appel blog 帖子很感兴趣,该帖子有一个引用 ViewModel 的 View,并且在 View 中可以使用 Lambda 表达式访问 ViewModel 的多个实体中的属性:
@Html.EditorFor(model => model.ViewModelEntityName.Property)
我能够访问各个 ViewModel 实体,但不能访问这些实体的属性。这是我的代码:
视图模型
public class PoliciesTrustsViewModel
{
public ICollection<Insurance> Policies { get; set; } //model in partial class generated by EF database first
public ICollection<Companies> Trusts { get; set; } //model in partial class generated by EF database first
public PoliciesTrustsViewModel(ICollection<Insurance> policies, ICollection<Companies> trusts)
{
Policies = policies;
Trusts = trusts;
}
控制器
public ActionResult Create()
{
ICollection<Insurance> policies = db.Insurance.ToList();
ICollection<Companies> trusts = db.Companies.ToList();
var myViewModel = new ViewModels.PoliciesTrustsViewModel(policies, trusts);
return View(myViewModel);
}
查看
我将模型引用设置为 ViewModel:
@model IEnumerable<TrustsInsurance.ViewModels.PoliciesTrustsViewModel>
Lambda 表达式将接受实体名称,但不允许单个实体中的属性。所以
@Html.EditorFor(model => model.Policies, new { htmlAttributes = new { @class = "form-control" } })
是允许的,但是
@Html.EditorFor(model => model.Policies.Property, new { htmlAttributes = new { @class = "form-control" } })
产生“不包含定义”错误。我尝试在剃须刀中使用@foreach (var item in Model) 循环以及许多不同的演员表,但没有销售。那么如何使用 lambda 表达式跨多个模型访问属性呢?任何朝着正确方向轻推将不胜感激。
【问题讨论】:
-
您可能必须@using Your.Property.Types.Namespace 才能使其工作?
-
要添加到@SimonRowe 的答案,这可能会起作用,但怀疑这是您想要的
@Html.EditorFor(model => model.Policies.First().Property, new { htmlAttributes = new { @class = "form-control" } })
标签: c# asp.net-mvc entity-framework linq lambda