如何在MVC在页面上显示来自多个表中的数据? [英] How do I display data from multiple tables on a page in MVC?

查看:157
本文介绍了如何在MVC在页面上显示来自多个表中的数据?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在MVC页面上显示来自多个表中的数据?

我的模型:

这是页面模型

 公共类PageModel
    {
        [键]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)
        公众诠释的PageId {搞定;组; }        公共字符串的PageTitle {搞定;组; }        公共字符串PageSubject {搞定;组; }        公众的DateTime CREATEDATE {搞定;组; }        公众的DateTime UpdateDate {搞定;组; }        公众诠释的ParentId {搞定;组; }        公共布尔IsActive {搞定;组; }        公众的IList< PageContentModel> PageContentModels {搞定;组; }
        公众的IList< CommentModel> CommentModels {搞定;组; }
    }

这是内容模型

 公共类PageContentModel
    {
        [键]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)
        公众诠释内容识别{搞定;组; }        公众诠释的PageId {搞定;组; }
        公共虚拟PageModel PageModel {搞定;组; }        [需要]
        [数据类型(DataType.MultilineText)
        [MAXLENGTH(1024)]
        公共字符串内容{搞定;组; }
    }

本评论模型

 公共类CommentModel
        {
            [键]
            [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)
            公众诠释CommentId {搞定;组; }            公共字符串CommentAuthor {搞定;组; }            公共字符串CommentContent {搞定;组; }            公众的DateTime CREATEDATE {搞定;组; }            公共布尔IsActive {搞定;组; }            公众诠释的PageId {搞定;组; }
            公共虚拟PageModel PageModel {搞定;组; }
        }

我写了下面

但它注册注释时给出错误信息

错误信息:此对象定义无参数的构造函数

  @model元组LT; D​​ynamicWebsite.Models.PageModel,DynamicWebsite.Models.CommentModel>
@helper GetParentTitle(INT ID)
{
    如果(ID!= 0)
    {
        DynamicWebsite.DataLayer.EFDbContext X =新DynamicWebsite.DataLayer.EFDbContext();
        VAR项目= x.PageModels.Find(ID);
        x.Dispose();
    @GetParentTitle(item.ParentId);
    <跨度> | &所述; /跨度>&下; A HREF =@ item.PageId> @ item.PageTitle&下; / A>    }
    其他
    {
    @ Html.ActionLink(家,索引,家)}
}
@GetParentTitle(Model.Item1.PageId)
@if(Model.Item1.IsActive)
{    ViewBag.Title = Model.Item1.PageTitle;    <&字段集GT;
        <传奇> PageModel< /传说>        < D​​IV CLASS =显示标签>
            一页标题:LT; H2> @ Model.Item1.PageSubject< / H>
        < / DIV>
        &所述p为H.;
            @foreach(在Model.Item1.PageContentModels VAR项)
            {
                @ item.Content
            }
        &所述; / P>
        @if(Model.Item1.UpdateDate> Model.Item1.CreateDate)
        {
            <&H5 GT;创建日期:@的String.Format({0:绿},Model.Item1.CreateDate)LT; / H5>
            <&H5 GT; UpdateDate:@的String.Format({0:绿},Model.Item1.UpdateDate)LT; / H5>
        }
        其他
        {
            <&H5 GT;创建日期:@的String.Format({0:绿},Model.Item1.CreateDate)LT; / H5>
        }
        @foreach(在Model.Item1.CommentModels VAR项)
        {
            如果(item.IsActive)
            {
            < H3> @ item.CommentAuthor说:< / H3 GT&;
            &所述p为H.; @ item.CommentContent&下; / P>
            <&H5 GT;创建日期:@的String.Format({0:绿},item.CreateDate)LT; / H5>
            }
        }
    < /字段集>    使用(Html.BeginForm())
    {
    @ Html.ValidationSummary(真)
    <&字段集GT;
        <传奇> CommentModel< /传说>
            < D​​IV CLASS =编辑标记>
                @ Html.LabelFor(型号=> model.Item2.CommentAuthor)
            < / DIV>
            < D​​IV CLASS =主编场>
                @ Html.EditorFor(型号=> model.Item2.CommentAuthor)
                @ Html.ValidationMessageFor(型号=> model.Item2.CommentAuthor)
            < / DIV>            < D​​IV CLASS =编辑标记>
                @ Html.LabelFor(型号=> model.Item2.CommentContent)
            < / DIV>
            < D​​IV CLASS =主编场>
                @ Html.EditorFor(型号=> model.Item2.CommentContent)
                @ Html.ValidationMessageFor(型号=> model.Item2.CommentContent)
            < / DIV>
        &所述p为H.;
            <输入类型=提交值=创建/>
        &所述; / P>
    < /字段集>
    }}
其他
{
    ViewBag.Title =去激活;
    < P>这页去激活< / P>
}


解决方案

修正创建一个新的模型误差

 公共类PageViewModel
    {
        公共PageModel PageModel {集;得到; }
        公共CommentModel CommentModel {集;得到; }
    }

How do I display data from multiple tables on a page in MVC?

My models:

This is page model

public class PageModel
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int PageId { get; set; }

        public string PageTitle { get; set; }

        public string PageSubject { get; set; }

        public DateTime CreateDate { get; set; }

        public DateTime UpdateDate { get; set; }

        public int ParentId { get; set; }

        public bool IsActive { get; set; }

        public IList<PageContentModel> PageContentModels { get; set; }
        public IList<CommentModel> CommentModels { get; set; }
    }

This is content model

 public class PageContentModel
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int ContentId { get; set; }

        public int PageId { get; set; }
        public virtual PageModel PageModel { get; set; }

        [Required]
        [DataType(DataType.MultilineText)]
        [MaxLength(1024)]
        public string Content { get; set; }
    }

This comment model

public class CommentModel
        {
            [Key]
            [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
            public int CommentId { get; set; }

            public string CommentAuthor { get; set; }

            public string CommentContent { get; set; }

            public DateTime CreateDate { get; set; }

            public bool IsActive { get; set; }

            public int PageId { get; set; }
            public virtual PageModel PageModel { get; set; }
        }

I wrote the following

But it gives an error message when registering comment

Error message: No parameterless constructor defined for this object

@model Tuple<DynamicWebsite.Models.PageModel, DynamicWebsite.Models.CommentModel>
@helper GetParentTitle(int id)
{
    if (id != 0)
    {
        DynamicWebsite.DataLayer.EFDbContext x = new DynamicWebsite.DataLayer.EFDbContext();
        var item = x.PageModels.Find(id);
        x.Dispose();
    @GetParentTitle(item.ParentId);
    <span>| </span><a href="@item.PageId">@item.PageTitle</a>

    }
    else
    {
    @Html.ActionLink("Home", "Index", "Home")}
}
@GetParentTitle(Model.Item1.PageId)
@if (Model.Item1.IsActive)
{

    ViewBag.Title = Model.Item1.PageTitle;

    <fieldset>
        <legend>PageModel</legend>

        <div class="display-label">
            Page Subject:<h2>@Model.Item1.PageSubject</h2>
        </div>
        <p>
            @foreach (var item in Model.Item1.PageContentModels)
            {
                @item.Content
            }
        </p>
        @if (Model.Item1.UpdateDate > Model.Item1.CreateDate)
        {
            <h5>Create Date: @String.Format("{0:g}", Model.Item1.CreateDate)</h5>
            <h5>UpdateDate: @String.Format("{0:g}", Model.Item1.UpdateDate)</h5>
        }
        else
        {
            <h5>Create Date: @String.Format("{0:g}", Model.Item1.CreateDate)</h5>
        }
        @foreach (var item in Model.Item1.CommentModels)
        {
            if (item.IsActive)
            {
            <h3>@item.CommentAuthor said:</h3>
            <p>@item.CommentContent</p>
            <h5>Create Date: @String.Format("{0:g}", item.CreateDate)</h5>
            }
        }
    </fieldset>

    using (Html.BeginForm())
    {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>CommentModel</legend>
            <div class="editor-label">
                @Html.LabelFor(model => model.Item2.CommentAuthor)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Item2.CommentAuthor)
                @Html.ValidationMessageFor(model => model.Item2.CommentAuthor)
            </div>

            <div class="editor-label">
                @Html.LabelFor(model => model.Item2.CommentContent)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.Item2.CommentContent)
                @Html.ValidationMessageFor(model => model.Item2.CommentContent)
            </div>
        <p>
            <input type="submit" value="Create" />
        </p>
    </fieldset>
    }



}
else
{
    ViewBag.Title = "Deactive";
    <p>This page deactive.</p>
}

解决方案

Create a new model error corrected

public class PageViewModel
    {
        public PageModel PageModel { set; get; }
        public CommentModel CommentModel { set; get; }
    }

这篇关于如何在MVC在页面上显示来自多个表中的数据?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆