也许这是一个错误的问题,但是可以在单个@Html.DisplayFor中加入2个lambada表达式。或者我必须使用不同的方法吗?
我有一个控制器/索引页面:
// GET: PAYMENT
public ActionResult Index()
{
var pAYMENT = db.PAYMENT.Include(p => p.CUSTOMERS).Include(p => p.LOCATION);
return View(pAYMENT.ToList());
}
cshtml中的:
<td>
@Html.DisplayFor(modelItem => item.CUSTOMERS.CustomerName)
</td>
我想要的是,我必须在单个@ Html.DisplayFor中显示CustomerName和CustomerSurname。我该怎么做?
答案 0 :(得分:2)
blueberry,amaretto
需要一个属性来映射,因此连接是不可能的。
方法1:
您可能会在模型上公开一个只读属性FullName,然后返回连接:
DisplayFor
然后在你的DisplayFor中使用它。
public string FullName
{
get
{
return User.CustomerName + " " + User.CustomerSurName;
}
}
方法2:
@Html.DisplayFor(modelItem => modelItem.FullName);
方法3:
var FullName= item.CustomerName + item.User.CustomerSurName;
<tr>
<td>
@Html.Display(FullName)
</td>
</tr>
答案 1 :(得分:1)
一个快速简单的修复(假设你想要将CustomerName
和CustomerSurname
呈现为普通文字)就是这样写:
<td>
@Model.CustomerName @Model.CustomerSurname
</td>
这有一个缺点,即,如果你使用自定义显示模板(例如,以某种一致的方式呈现文本<span>
或类似的东西,你会失去集中显示样式的优点。(阅读自定义编辑器/显示模板,找出这意味着什么。)
更优雅,通常更优选的选项是使用视图模型,它包含您需要的形式的数据,而不是将数据库实体传递给您的视图,这是一种不好的做法。
public class PaymentViewModel
{
public String CustomerName { get; set; }
public String CustomerSurname { get; set; }
public String CustomerFullName { get { return String.Format("{0} {1}", CustomerName, CustomerSurname); } }
// ... more properties
}