我正在使用asp.net mvc 4
和EF 6
制作一个消息面板,我想在其中显示单线程列表。如果查看了某个线程,用户可以看到该特定线程下的所有消息。在DB中,每条消息都具有相同的thread id
,因此可以在特定线程下查看消息。到目前为止,用户可以查看特定线程下的消息,但线程列表将每条消息显示为一个线程。这是我的代码,
控制器
public ActionResult ViewAllThreads(string MsgPanelId)
{
var getUser = rentdb.OwnerRegs.Where(a => a.username == User.Identity.Name).FirstOrDefault();
InboxModel allThreads = new InboxModel() { AllMsg = db.MsgToDb.Where(a => a.owner_id == getUser.serial).ToList() };
ViewBag.OwnerId = getId;
return View(allThreads);
}
查看
@foreach (var item in Model.AllMsg)
{
<tr>
<td class="text-center">@Html.DisplayFor(modelItem => item.name)</td>
<td class="text-center">@Html.DisplayFor(modelItem => item.title)</td>
<td class="text-center">@Html.DisplayFor(modelItem => item.addedtime)</td>
<td class="text-center">@Html.EncodedAction("<b>View Thread</b>", "Reply", "Home", new { thread_id = item.thread_id, msg_id = item.serial })</td>
</tr>
}
如何列出具有相同thread id
的邮件将显示为单个帖子的列表?急需这个帮助!感谢。
更新
以下是表格设计的简介
答案 0 :(得分:0)
但是线程列表将每条消息显示为一个线程
因为这就是你要查询的内容。看到这行代码。
db.MsgToDb.Where(a => a.owner_id == getUser.serial).ToList()
您正在查询邮件。如果你想要线程,你应该查询线程表/实体。
所以我会在你的视图模型中为线程列表添加一个新属性。
public class ThreadViewModel
{
public int Id {set;get;}
public string Title {set;get;}
}
public class InboxViewModel
{
public List<ThreadViewModel> Threads {set;get;}
public InboxViewModel()
{
Threads= new List<ThreadViewModel>();
}
}
并在您的操作方法中
public ActionResult ViewAllThreads(string MsgPanelId)
{
var getUser = rentdb.OwnerRegs.Where(a => a.username == User.Identity.Name)
.FirstOrDefault();
var vm=new InboxViewModel();
vm.Threads = rentdb.Threads.Where(a => a.owner_id == getUser.serial)
.Select(t=>new ThreadViewModel { Id=t.Id,Title=t.Title}).ToList();
return View(vm);
}
假设rentdb.Threads
返回Thread实体的集合。
现在,您的ViewAllThreads.cshtml
视图应该强烈输入我们的视图模型
@model InboxViewModel
<table>
<td><th>Title</th>
@foreach (var item in Model.AllMsg)
{
<tr>
<td class="text-center">@Html.DisplayFor(modelItem => item.title)</td>
<td class="text-center">@Html.ActionLink("View Thread", "Reply", "Home",
new { threadId = item.Id },null)</td>
</tr>
}
</table>
现在要在线程下显示消息,您可以在“回复操作方法”
中查询该线程下的消息public ActionResult Reply(int threadId)
{
var threads = rentdb.Messages.Where(s=>s.thread_id==theadId).ToList();
var vm =new InboxModel() { AllMsg = threads };
return View(vm);
}
您可以根据需要为此方法添加更多空值/安全性检查。