【问题标题】:bind two data models to one model in mvc在 mvc 中将两个数据模型绑定到一个模型
【发布时间】:2015-08-28 05:23:40
【问题描述】:

我正在创建 MVC 5 应用程序,在此应用程序中,我使用一个 var 模型加入多个数据表,并将该值绑定到“DiscussionPreview_Model”模型以列出数据

这是控制器类

   public ActionResult Discussion_Preview()
    {

        int Discussion_ID = 1;


        var discussion_preview = (from d in db.AB_Discussion
                                  where d.Discussion_ID == Discussion_ID
                                  join dc in db.AB_DiscussionComments on d.Discussion_ID equals dc.Discussion_ID
                                  join user_discussion in db.AspNetUsers on d.CreatedBy equals user_discussion.Id
                                  join user_comments in db.AspNetUsers on dc.CreatedBy equals user_comments.Id

                                  select new DiscussionPreview_Model
                                  {
                                      Disussion_ID = d.Discussion_ID,
                                      Discussion_CreateDate = d.CreatedDate,
                                      Discussion_CreateBy = user_discussion.UserName,
                                      Discussion_Title = d.Discussion_Name,
                                      Discussion_Description = d.Discription,
                                      Comment_ID = dc.Comment_ID,
                                      Comment_Description = dc.Comment_Discription,
                                      Comment_CreateDate = dc.CreatedDate,
                                      Comment_CreateBy = user_comments.UserName

                                  });


            return View(discussion_preview);
    }

这是我的“DiscussionPreview_Model”模型类

   public class DiscussionPreview_Model
    {

        DiscussionVM model1;
        CommentVM model2;

    }


    public partial class DiscussionVM
    {
        public int Disussion_ID { get; set; }
        public Nullable<System.DateTime> Discussion_CreateDate { get; set; }
        public string Discussion_CreateBy { get; set; }
        public string Discussion_Title { get; set; }
        public string Discussion_Description { get; set; }

        public IEnumerable<CommentVM> Comments { get; set; }

    }

    public partial class CommentVM
    {
        public int Comment_ID { get; set; }
        public Nullable<System.DateTime> Comment_CreateDate { get; set; }
        public string Comment_CreateBy { get; set; }
        public string Comment_Description { get; set; }
    }

这是查看页面

 @model IEnumerable<prjkt.Models.DiscussionPreview_Model>

@{
    ViewBag.Title = "Discussion_Preview";
    Layout = "~/Views/Shared/_Layout.cshtml";
}


@foreach (var discussion in Model.DiscussionVM)
{

<h3>>@discussion.Discussion_Title</h3>

<div>@discussion.Discussion_Description</div>
<div>@discussion.Discussion_CreateDate</div>
}

@foreach (var item in Model.CommentVM)
{

    <fieldset>
        <legend></legend>


        <h4>Comments</h4>
        <div class="display-field">@item.Comment_Description</div>
        <div class="display-field">@item.Comment_CreateBy : @item.Comment_CreateDate </div>

    </fieldset>
}

但这不能正常工作,我试图通过多种方式克服这个问题

真的很感激可以建议一个强大的linq查询方法

【问题讨论】:

  • 你上一个问题没有看我的cmets吗? DiscussionVM 已包含其 cmets 的属性。您需要初始化一个DiscussionVM,从AB_Discussion 表中填充其一般属性(NameDescription 等),然后从AB_DiscussionComments 表中填充其cmets 集合。
  • 不能正常工作是什么意思?你能告诉我你所面临的具体问题吗?
  • @Chathz,我稍后会看一下,但从视图模型的var discussion = db.db.AB_Discussion.Where(d =&gt; d.Discussion_ID == Discussion_ID).FirstOrDefault(); and populate the Title, Description` 等属性开始。然后var comments = db.AB_DiscussionComments.Where(c =&gt; c.Discussion_ID == Discussion_ID); 并使用它来填充Comments 属性(将其分解为步骤,直到您了解自己在做什么)
  • model.Comments = comments.Select(c =&gt; new CommentVM(){ Comment_ID = c.Comment_ID, Comment_Description = c.Comment_Description , ....etc};
  • 我已经更新了DotNetFiddle,希望能给你一个更好的理解

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


【解决方案1】:

这在此处不起作用:

@foreach (var discussion in Model.DiscussionVM)

因为 Model.DiscussionVM 不是 IEnumerable

尝试枚举模型并访问该集合中到达项目的 .DiscussionVM

@foreach (var item in Model)
{
<h3>@item.DiscussionVM.Discussion_Title</h3>

<div>@item.DiscussionVM.Discussion_Description</div>
<div>@item.DiscussionVM.Discussion_CreateDate</div>
}

【讨论】:

  • 其实我的Controller也有问题,
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-13
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多