【问题标题】:Select List returns System.Data.Entity.DynamixProxies instead of values in MVC asp.net C#选择列表返回 System.Data.Entity.DynamixProxies 而不是 MVC asp.net C# 中的值
【发布时间】:2013-05-01 10:26:29
【问题描述】:

我有两张不同的桌子。用户和项目详细信息。还有两个不同的控制器可以对这些表执行 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。我怎么能得到那个?

【问题讨论】:

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


【解决方案1】:

你使用了错误的重载,改用这个:

@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 选择了哪个值的重载。

【讨论】:

  • 摇滚!!!!!!!!!!请现在,您能告诉我如何将其映射到用户字段吗?我得到了下拉菜单。我应该将下拉列表中选择的值映射到用户模式下的输入字段,即 Project。
  • 您是否有类似User.Project 的内容,其中Project 的字段为Id?如果是,则执行x=&gt;x.Project.Id, new Selectlist...
  • von v - 对不起,还有一个疑问。这在我的创建操作中很容易。我怎么可能为编辑做到这一点?公共 ActionResult Create() { var model = new UserDetail { ProjectDetail = db1.ProjectDetails };返回视图(模型);现在,在编辑中 - 我有 public ActionResult Edit(string id) { UserDetail userdetail = db.UserDetails.Find(id);返回视图(用户详细信息); }
  • 您执行与添加相同的操作。查询对象 (Find(id)) 后,执行 userinstance.ProjectDetail = db1.ProjectDetails。此外,您可能需要考虑使用视图模型,这比传递您的实体/模型要好。
  • 太棒了。当然.. 将检查 ViewModel 方法。
【解决方案2】:

你可以这样做

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

【讨论】:

    【解决方案3】:

    你可以试试

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

    【讨论】:

    • 试试这样@Html.DropDownListFor(x => x.ProjectDetail, new SelectList(Model.ProjectDetail, "Project ID"))
    • 对不起这样@Html.DropDownListFor(x => x.UserDetail.ProjectDetail, new SelectList(Model.UserDetail.ProjectDetail, "Project ID"))
    • 看起来不错,我必须有不同的重载。请检查 von v 答案。它的工作.. :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-04
    相关资源
    最近更新 更多