2013-08-11 3 views
4

Я уже прочитал несколько вопросов по этой теме, но, честно говоря, большинство из них были слишком сложными для меня. Я очень новичок в ASP.NET mvc.Как показать данные master-detail на странице ASP.NET mvc?

У меня есть пример приложения ASP.NET mvc 4, которое я создал, следуя вместе с (и немного отклонившись) от учебника базы данных Movie. У этого есть встроенные биты счета, Entity Framework (которая оказалась болью в любое время, когда я что-то меняю) плюс 2 модели, которые я построил на основе моделей из учебника:

1) Ошибка

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; } 
    } 
} 

Когда я запускаю мое приложение, я в состоянии пойти в/проект и получить стандартное представление Index со ссылкой Add, где я могу добавить Bug. После добавления я вижу обычные ссылки «Редактировать/Детали/Удалить».

Когда я запускаю свое приложение, я также могу пойти в/Комментарий и получить стандартное представление индекса с помощью ссылки «Добавить», где я могу добавить комментарий. После добавления я вижу обычные ссылки «Редактировать/Детали/Удалить».

До этого момента я в порядке. CRUD формирует работу, они просто не работают вместе.

ПРОБЛЕМА:

В настоящее время для того, чтобы сделать комментарий применить к Бугу, у меня есть на самом деле ввести BUGID в/Комментарий/Создать форму. И тогда комментарии все доступны только на/Comment/route.

Вместо этого мне нужно следующее произойдет:

  • «Добавить комментарий» форма должна автоматически знать, что BUGID в сохранить без пользователь, имеющий для ввода его.
  • Представление данных с основными данными: представление/комментарий/указатель должно отображаться в нижней части страницы/Bug/Edit and/or Bug/Details и показывать только комментарии, связанные с текущей ошибкой.
  • Ссылка «Добавить комментарий» должна появляться только на странице/Bug/Edit или /Bug/Details, поэтому комментарии никогда не добавляются без ссылки на ошибку.

Это удивительно, что я не смог понять это сам, проведя 3 дня, просматривая каждый результат Google и сообщение SO, которое я могу найти по этой теме. Тем не менее, я здесь, надеясь узнать простейшую возможную реализацию этого.

Должен ли я размещать больше кода (например, Контроллеры или Представления), чтобы этот вопрос отвечал должным образом?

Глядя вперед, чтобы получить медленный учебный поезд, чтобы начать вытягивать из станции ...

ответ

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 от пройденной модели.

Для вашего последнего вопроса просто поместите ссылку «Добавить комментарий» в ваш комментарий/Index.cshtml, так как он будет отображаться в любом случае в контексте ошибки. Вам, вероятно, придется обернуть это вокруг формы, которая отправляется на ваш комментарий.

Вот полезные ссылки на работы с формами в ASP.NET 4.

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