【问题标题】:Lambda expression too complex for editor templateLambda 表达式对于编辑器模板来说太复杂了
【发布时间】:2013-05-08 12:33:16
【问题描述】:

在我看来,我有一行代码可以呈现一个编辑器模板。

但是,它返回错误:

模板只能用于字段访问、属性访问、单维数组索引或单参数自定义索引器表达式。

这似乎是实现我想要的最优雅的方式,但我意识到我的视图中的 lambda 表达式对于编辑器模板来说太复杂了。

任何人都可以建议如何进行这项工作或建议我更好的方法吗?

查看

@Html.EditorFor(model => model.Approvers.Where(a => a.ApprovalCount > 0))

编辑器模板

@model Project.ViewModels.AssignedApproverData

<div class="span3">
    <label class="checkbox inline">
        @Html.HiddenFor(model => model.EmployeeID)    
        @Html.CheckBoxFor(model => model.Assigned)
        @Html.DisplayFor(model => model.FullName)
    </label>
</div>

编辑器模板视图模型

using System;
using System.Collections.Generic;
using Project.Models;

namespace Project.ViewModels
{
    public class AssignedApproverData
    {
        public string EmployeeID { get; set; }
        public string FullName { get; set; }
        public bool Assigned { get; set; }
        public int ApprovalCount { get; set; }
    }
}

视图模型

namespace Project.ViewModels
{
    public class ChangeRequestViewModel
    {
        public virtual ICollection<AssignedApproverData> Approvers { get; set; }
    }
}

【问题讨论】:

    标签: asp.net-mvc entity-framework razor lambda


    【解决方案1】:

    错误消息说明了一切:您不能将复杂的 lambda 表达式与强类型助手一起使用。仅支持属性访问和索引器访问表达式。

    任何人都可以建议如何进行这项工作或建议我更好的方法吗?

    当然是使用视图模型。

    所以继续在视图模型上定义一个可以在视图中使用的属性,而不是在视图中编写这样的代码:

    @Html.EditorFor(model => model.AcceptedApprovers)
    

    您将在视图模型上拥有相应的属性:

    public class ChangeRequestViewModel
    {
        public virtual ICollection<AssignedApproverData> AcceptedApprovers { get; set; }
    }
    

    在呈现此视图的控制器操作中,您将从域模型中填充此属性:

    public ActionResult SomeAction()
    {
        var domainModel = ... fetch your domain model from your repository as usual
        var viewModel = new ChangeRequestViewModel();
        viewModel.AcceptedApprovers = domainModel.Approvers.Where(a => a.ApprovalCount > 0);
        return View(viewModel);
    }
    

    显然,视图模型将只包含视图所需的信息,不会更多,也不会更少。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-04-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 2021-06-02
      • 1970-01-01
      • 2020-11-26
      相关资源
      最近更新 更多