【问题标题】:passing NotMapped Property to DropdownList through ViewBag通过 ViewBag 将 NotMapped 属性传递给 DropdownList
【发布时间】:2013-11-20 13:42:24
【问题描述】:
public class EmployeeDetail
{
    [Key]
    public int EmployeeId { get; set; }

    public string FirstName { get; set; }

    public string MiddleName { get; set; }

    public string LastName { get; set; }

    [NotMapped]
    public string FullName
    {
        get
        {
            return (this.FirstName + " " + this.MiddleName + " " + this.LastName).ToUpper();
        }
    }
}

创建动作方法

public ActionResult CreateEmploymentType()
{
    PopulateEmployeeIdDropDownList();
    return View();
}

填充方法

private void PopulateEmployeeIdDropDownList(object selectedEmployeeId = null) 
{

    var EmployeeIdQuery = from d in db.EmployeeDetails
                  orderby d.FullName
                  select d;

    ViewBag.EmployeeId = new SelectList(EmployeeIdQuery, "EmployeeId", "FullName", selectedEmployeeId);
}

查看下拉列表

EmployeeName: @Html.DropDownListFor(model => model.EmployeeId, (SelectList)ViewBag.EmployeeId)

问题:

当我运行应用程序时,它会给出错误消息

LINQ to Entities 不支持指定的类型成员“FullName”。仅支持初始化程序、实体成员和实体导航属性。

【问题讨论】:

    标签: c# asp.net asp.net-mvc razor


    【解决方案1】:

    我认为问题在于 LINQ 查询,因为数据库中不存在 FullName LINQ to Entities 无法生成查询。所以手动设置吧

    var EmployeeIdQuery = from d in db.EmployeeDetails
                  orderby d.FirstName + " " + d.MiddleName + " " + d.LastName
                  select d;
    

    我还建议您不要通过查询传递Output 并删除延迟执行。

    ViewBag.EmployeeId = new SelectList(
        EmployeeIdQuery.ToList(), "EmployeeId", "FullName", selectedEmployeeId);
    

    【讨论】:

      【解决方案2】:

      只需将查询发送到列表即可摆脱延迟执行:

      ViewBag.EmployeeId = new SelectList(
          EmployeeIdQuery.ToList(), "EmployeeId", "FullName", selectedEmployeeId);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-04-03
        • 2010-11-04
        • 2023-03-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-23
        相关资源
        最近更新 更多