3

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

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

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

在控制器中,在创建操作中,我添加了以下代码:

    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###########(一些数字)..

请问有人可以帮我吗?

问候, 哈里

[编辑] - 我在调试模式下检查并发现以下内容..尝试附加图像..

我深入研究了 Proxy 的东西并在那里找到了 ProjectID。我怎么能得到那个?

4

3 回答 3

4

您使用了错误的重载,请改用:

@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

datavalue在您的代码中,您并没有告诉 html 帮助程序要为和使用什么属性datatext。您使用的重载是您告诉 htmlhelper 选择了哪个值的重载。

于 2013-05-01T10:41:10.003 回答
3

你可以做类似的事情

var projection = db1.ProjectDetails.Select(t => new ProjectDetailsViewModel
            {
                Prop1 = t.Prop1,
                Prop2 = t.Prop2
            });
于 2013-05-01T10:41:06.853 回答
0

你能试一下吗

public ActionResult Create()
    {
        var model = new UserDetail
        {
            ProjectDetail = db1.ProjectDetails.ToList()
        };
        return View(model);
    } 
于 2013-05-01T10:29:59.623 回答