2012-03-22 2 views
1

에 익명의 유형을 통과, 난 그냥 u.Name 및 s.Idoffice보기 전송하려면이 컨트롤러와 다음 컨트롤러나는 문제가 내 ASP.NET MVC보기

namespace RolesMVC3.Areas.Administrador.Controllers 
{ 
    [Authorize(Roles = "Adminr")] 
    public class HomeController : Controller 
    { 
     private BASEDATOSCJ_2Entities db = new BASEDATOSCJ_2Entities(); 
     public ActionResult Index() 
     { 
      string username = User.Identity.Name; 
      MembershipUser user = Membership.GetUser(username); 
      Guid key = (Guid)Membership.GetUser().ProviderUserKey; 

      var Universities = (from u in db.UNIVERSITy 
           join s in db.CAMPUS_UNIVERSITy on u.IdUniversity equals s.IdUniversity 
           join c in db.CIUDAD_CAMPUS on s.IdCiudadSede equals c.IdCiudadSede 
           join co in db.OFFICE on s.Idoffice equals co.Idoffice 
           join uxc in db.USERxOFFICE on co.Idoffice equals uxc.Idoffice 
           where uxc.UserId == key 
           select new { u.Name, namecity = c.Nombre, s.Idoffice}).ToList(); 
      return View(Universities); 
     } 

있습니다. 내가 어떻게하는지? (사실이 컨트롤렛이 괜찮 으면 실제로 모르겠다.) 필드를 다른 테이블에 속하게하고 싶다. 쿼리를리스트로 보내고 View, ViewBag에 표시하고 싶습니까?,이 데이터를 뷰에 전달하고 foreach를 사용하여 표시하는 방법은 무엇입니까?

select new { u.Name, namecity = c.Nombre, s.Idoffice} 

이 목록 만에 두 필드를 선택

select new { Name = u.Name, Idoffice = s.Idoffice } 

사람 : 당신이 다음 줄을 변경하는 경우

나는 면도칼을

+0

http : // stackoverflow.COM/질문/5120317/동적 익명 형 -에 - 면도칼 - 원인 - runtimebinderexception –

답변

1

내가보기 모델을 사용합니다. 도메인 객체를 뷰에 노출시키지 않고 오히려 내 도메인 객체를 뷰 모델에 매핑하고이 뷰 모델을 뷰에 반환하는 방법을 배웠습니다.

보기 논리에서 데이터 액세스 논리를 분리합니다. 이 문장 전체를 저장소 클래스에 넣은 다음 컨트롤러에서이 메서드를 호출하면됩니다. 여기

은 표시 할 더 많은 데이터를 필요로하는 경우 더 많은 속성을 가지고 있습니다, 부분 뷰 모델 :

public class UniversityViewModel 
{ 
    IEnumerable<University> Universities { get; set; } 
} 

대학 클래스 :

public class University 
{ 
    public string Name { get; set; } 
    public string Idoffice { get; set; } 
} 

내 컨트롤러 내 행동 방법에 다음과 같이 보일 것입니다 :

public ActionResult Index(int id) 
{ 
    UniversityViewModel viewModel = new UniversityViewModel 
    { 
      Universities = universityRepository.GetAll() 
    }; 

    return View(viewModel); 
} 

그리고 내 견해로는 followin g는 :

<table> 

@foreach(University university in Model.Universities) 
{ 
    <tr> 
      <td>Name:</td> 
      <td>university.Name</td> 
    </tr> 
} 

</table> 

이 뷰에서 데이터의 단지 기본 표시입니다, 당신은 몇 가지 기능을 사용하여 데이터를 표시하는 제 3 자 구성 요소를 사용할 수 있습니다.

+0

덕분에 친구 내가 '공용 클래스 대학 { 공공 문자열 이름이 {얻을; 세트; } public int Idoffice {get; 세트; } }' 표시됨 : 암시 적으로 'decimal'유형을 'int'로 변환 할 수 없습니다. decimal을 int로 변환하는 방법은 무엇입니까? – CADAVID

+0

어디서이 오류가 발생합니까? 모든 코드를 통해 디버깅을 했습니까? 어딘가에 정수에 할당 된 10 진수가 있습니다. 당신이 그것을 찾을 수 있는지보십시오? –

3

를 사용합니다. 보기에서 다음과 같은 작업을 수행 할 수 있습니다

@model List<dynamic> 


@foreach(dynamic d in Model) { 
    <p>@d.Name</p> 
    <p>@d.Idoffice</p> 
} 

편집 : 당신은 당신의 데이터를 포함하는 뷰 모델을 정의 할 수 있습니다

. 같은 당신의 Razor 파일을

select new MyViewModel { Name = u.Name, Idoffice = s.Idoffice } 

을 그리고 업데이트 :

public class MyViewModel { 
    string Name {get;set;} 
    string Idoffice {get;set;} 
} 

지금 당신은 다음과 같이 select 문을 변경할 수 있습니다

@model List<MyViewModel> 


@foreach(MyViewModel d in Model) { 
    <p>@d.Name</p> 
    <p>@d.Idoffice</p> 
}