2016-07-21 2 views
0

asp.net mvc 4EF 6을 사용하여 단일 스레드 목록을 표시하려는 메시지 패널을 만듭니다. 스레드가 표시되면 사용자는 해당 스레드 아래의 모든 메시지를 볼 수 있습니다. DB에서 각 메시지는 thread id과 동일하므로 특정 스레드에서 메시지를 볼 수 있습니다. 지금까지 사용자는 특정 스레드 아래에서 메시지를 볼 수 있지만 스레드 목록은 각 메시지를 스레드로 표시합니다. 여기에 내가 같은 thread id있는 메시지는 단일 스레드로 표시됩니다 목록을 만들 수있는 방법asp.net mvc에서 동일한 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> 
} 

, 내 코드입니다? 이 도움이 나쁘다! 감사. 그 때문에

UPDATES 여기

나타난 디자인의 스냅이다

table_design

+0

**하지만 스레드 목록은 각 메시지를 스레드로 표시합니다 ** 스레드가 아닌 모든 메시지를 쿼리하고 있기 때문입니다. 이 부분을보십시오'db.MsgToDb.Where (' – Shyju

+0

응답을 주셔서 감사합니다. 전에도 알아 봤지만 해결 방법을 찾을 수 없습니다 .ASP.net에서 멍청 해요. 어떻게 생각해? 해결 하시겠습니까? –

+0

테이블/schma/엔티티를 모르면 어떻게 도와 드릴까요? – Shyju

답변

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

} 

.

이제 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); 
} 

필요에 따라 null/보안 검사를이 메소드에 추가 할 수 있습니다.

관련 문제