2013-12-11 3 views
0

로그인 한 사용자에 따라 내 웹 사이트의 데이터베이스에서 다른 정보를 표시하려고합니다. MVC로 시작 했으므로 (자습서 두 개를 수행하고 웹 페이지에서 내보기를 통해 정보를 볼 수 있습니다.) 이제 제가 원합니다. 로그인 한 사용자의 데이터를 필터링합니다. where 절을 어딘가에 생각하고 있습니다. 컨텍스트가 db에서 데이터를 가져 오는이 컨트롤러에서 생각하고 있습니다.MVC에서 특정 사용자와 동일한 데이터를 얻으려면 어떻게해야합니까?

하지만 어떻게? 아니면 잘못된 곳입니까? .. 당신이 좀 더 정보가 필요하면 내가 db.Contacts.ToList().Where()으로 노력하고 있습니다 ..

말해,하지만 난 여기에 사용자 이름에 접근하지는하십시오

private ApplicationDbContext db = new ApplicationDbContext(); 

// GET: 
public ActionResult Index() 
{ 
    return View(db.Contacts.ToList()); 
} 
+0

테이블 구조는 어떻게 생겼습니까? – Shyju

답변

2

무엇 연락처 클래스 모양처럼합니까? 아마도 연락처에 속한 사용자를 가리키는 외래 키가있을 것입니다. 그런 다음 해당 사용자 ID 필터링 할 수 있습니다

public class Contact 
{ 
    public int ContactId { get; set; } 
    public int UserId { get; set; } // the Id of the User the contact belongs to 
    public string Name { get; set; } 
    public string Phone { get; set; } 
} 

:처럼 뭔가

return View(db.Contacts.Where(c => c.UserId == CurrentUserId).ToList()); 

당신은 당신의 컨트롤러에서 User.Identity.Name 특성을 보면 현재 사용자 ID를 얻을 수 있습니다. 어떤 행동 그냥 CurrentUserId을 참조하고 그 방법에있을 수 있도록 사용자가 인증 할 때 일을 더 쉽게 만들려면 사용자 이름

public ActionResult Index() 
{ 
    User current = db.Users.Single(u => u.Username == User.Identity.Name); 

    return View(db.Contacts.Where(c => c.UserId == current.Id).ToList()); 
} 

을 저장 가정하면, 나는, 기본 컨트롤러에 CurrentUserId 전화를했습니다.

+0

기본적으로 CurrentUserId를 기본 컨트롤러에 넣는 대신에 똑같은 작업을 수행합니다. 세션에서 가져 오는 유틸리티 클래스에 넣거나 (세션에서 값 비싼 조회입니다) 세션에서 누락 된 경우 가져옵니다. 우리에게 약간의 성능 향상을 가져다 주며, 여러 컨트롤러에서 재사용 할 수 있으며, 모든 컨트롤러를 깨끗하게 유지할 수 있습니다. –

+0

나는 동의한다, 나는 현재 사용자를 캐싱하는 것과 같은 일을한다. 내 기본 컨트롤러에서 CurrentUser 속성을 좋아하고 OnActionExecuting()을 사용하여 캐시/세션을 조회합니다. 그렇게하면 개별 작업이 특별한 작업을 수행 할 필요가 없으며 CurrentUser를 사용할 수 있습니다. 단위 테스트의 경우 OnActionExecuting()이 실행되지 않으므로 Session을 생략하고 CurrentUser 속성을 수동으로 설정합니다. – mfanto

+0

고마워, 내가 필요한 것! –

관련 문제