加入lambda表达式的最佳方法是什么

时间:2015-11-24 08:48:36

标签: lambda asp.net-mvc-5

也许这是一个错误的问题,但是可以在单个@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。我该怎么做?

2 个答案:

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

一个快速简单的修复(假设你想要将CustomerNameCustomerSurname呈现为普通文字)就是这样写:

<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
}