选择列表返回System.Data.Entity.DynamixProxies而不是MVC asp.net c#中的值

本文关键字:net asp MVC System 返回 列表 Data Entity DynamixProxies 选择 | 更新日期: 2023-09-27 18:11:50

我有两个不同的表。用户和项目详细信息。还有两个不同的控制器对这些表执行CRUD操作。现在,我有一个例子,在User CREATE操作中,我必须从ProjectDetails中的项目列表中选择项目。我尝试了以下操作:

在用户模型中,我创建了这一行:

    public IEnumerable<ProjectDetail> ProjectDetail { get; set; }

在控制器的create Action中,我添加了以下代码:

    public ActionResult Create()
    {
        var model = new UserDetail
        {
            ProjectDetail = db1.ProjectDetails
        };
        return View(model);
    } 

在创建视图中,我试图获得项目id的列表,如下所示:

@Html.DropDownListFor( x => x.ProjectDetail, new SelectList(Model.ProjectDetail, "Project ID"))

然而,当我运行时,我得到的行数(等于项目的数量)为

System.Data.Entity.DynamicProxies。ProjectDetails_F###########(一些数字)..

请问有人能帮帮我吗?

问候,哈里

[EDIT] -我在调试模式下检查,发现以下…尝试附加图像…

我钻了代理的东西,找到了投影。我怎样才能得到它呢?

选择列表返回System.Data.Entity.DynamixProxies而不是MVC asp.net c#中的值

你正在使用一个错误的重载,使用这个代替:

@Html.DropDownListFor( x => x.ProjectDetail, 
    new SelectList(Model.ProjectDetail, "ProjectId","ProjectName"))
// where ProjectId is the unique identifier field of `ProjectDetail` 
// and `ProjectName` is the text you want to show in the dropdown

在你的代码中,你没有告诉html帮助器datavaluedatatext使用什么属性。您使用的重载是告诉htmlhelper选择哪个值的重载。

你可以这样做

var projection = db1.ProjectDetails.Select(t => new ProjectDetailsViewModel
            {
                Prop1 = t.Prop1,
                Prop2 = t.Prop2
            });

你能试试吗

public ActionResult Create()
    {
        var model = new UserDetail
        {
            ProjectDetail = db1.ProjectDetails.ToList()
        };
        return View(model);
    }