如何在ASP.NET mvc页面上显示master-detail数据?

时间:2013-08-11 22:26:23

标签: asp.net-mvc parent-child master-detail

我已经阅读了几个关于这个主题的SO问题,但老实说,大多数问题对我来说太复杂了。我是ASP.NET mvc的新手。

我有一个示例ASP.NET mvc 4应用程序,我通过跟随(并稍微偏离)Movie数据库教程创建。它有内置的帐户位,实体框架(在我改变任何东西的时候已经证明是痛苦的)加上我根据教程中的模型建立的2个模型:

1)Bug

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;

namespace MasterDetailPractice.Models
{
    public class Bug
    {
        public int BugID { get; set; }
        public string BugTitle { get; set; }
        public DateTime BugDate { get; set; }
        public string BugStatus { get; set; }
        [Column(TypeName = "ntext")]
        [MaxLength]
        public string BugDescription { get; set; }
    }

    public class BugDBContext : DbContext
    {
        public DbSet<Bug> Bugs { get; set; }
        public DbSet<Comment> Comments { get; set; }
    }

}

2)评论

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;

namespace MasterDetailPractice.Models
{
    public class Comment
    {
        public int CommentID { get; set; }
        public int BugID { get; set; }
        public int UserID { get; set; }
        public DateTime CommentDate { get; set; }
        [Column(TypeName = "ntext")]
        [MaxLength]
        public string CommentText { get; set; }
    }
}

当我运行我的应用程序时,我可以转到/ Project并使用Add链接获取标准的Index视图,我可以在其中添加Bug。添加后,我会看到通常的编辑/详细信息/删除链接。

当我运行我的应用程序时,我也可以转到/ Comment并使用Add链接获取标准的Index视图,我可以在其中添加Comment。添加后,我会看到通常的编辑/详细信息/删除链接。

到目前为止,我很好。 CRUD表单起作用,它们只是不能一起工作

问题:

目前,为了使评论适用于Bug,我必须在/ Comment / Create表单中输入BugID。然后评论只能在/ Comment / route上找到。

相反,我需要做以下事情:

  • “添加评论”表单应自动知道哪些BugID 保存而无需用户输入。
  • 数据的主要详细信息显示:/ Comment / Index视图应显示在/ Bug / Edit和/或Bug / Details页面的底部,并仅显示与当前Bug相关的注释。
  • “添加评论”链接应仅显示在/ Bug / Edit或 / Bug / Details页面,因此在不与Bug相关的情况下永远不会添加注释。

令人惊讶的是,我花了3天时间仔细研究了每一个谷歌搜索结果以及我可以找到关于这个主题的帖子后,我自己都无法弄清楚这一点。也就是说,我在这里,希望学习最简单的实现。

我是否需要发布更多代码(例如控制器或视图)以使此问题能够正确回答?

期待让慢速学习的火车开始退出车站......

1 个答案:

答案 0 :(得分:0)

好的,你需要做一些事情。

首先,在CommentController中创建一个看起来像这样的新动作方法。

public ActionResult Index(int bugId)
{
    // Your logic to fetch all comments by BugID through EntityFramework or whatever
    return View(data);
}

现在,在您的Bug / Edit.cshtml或Bug / Details.cshtml页面中添加以下行以内联呈现这些操作。

@Html.RenderAction("Index", "Comment", new { @bugId = Model.BugID }

在这种情况下,您应该将BugModel作为模型返回到Bug / Edit.cshtml或Bug / Details.cshtml。

这应该显示您需要的表单,模型中的BugID将被传递。

对于您的上一个问题,只需在Comment / Index.cshtml视图中添加“添加注释”链接,因为它只会出现在bug的上下文中。您可能需要将它包装在发布到CommentController的表单周围。

这是有关使用ASP.NET 4中的表单的有用链接。

http://www.asp.net/mvc/tutorials/hands-on-labs/aspnet-mvc-4-helpers,-forms-and-validation