2012-03-02 2 views
0

자바 스크립트 애플리케이션 (SignalR과 함께 백엔드에 ASP.net MVC 3)이 있고 필요한 필드 만 반환하려는 경우 동적이어야합니다.).ASP.NET MVC 3 - 반환을 위해서만 동적 객체 만들기

엔티티 프레임 워크를 사용하지만 클라이언트 측에서 필요하지 않은 검사 용 필드 나 메소드 용 필드가 필요하기 때문에 특정 열만 선택할 수 없습니다.

때문에, 현재 나는이합니다

public void GetPerson(int personID) 
    { 
     // Some logic... 

     // person is a entity from the entity framework (Person) 
     dynamic p = new 
     { 
      ID = person.ID, 
      FirstName = person.FirstName, 
      LastName = person.LastName 
     }; 

     Clients[Context.ConnectionId].loadPerson(p); 
    } 

을하지만 난 그 경우에 좋은 방법 (실적 등), 모르겠어요. 더 나은 솔루션이 있습니까? 아니면 여전히 동적 유형을 계속 사용할 수 있습니까?

+3

본인의 예를 이해할 수 없습니다. p는 만들지 만 사용하지 않습니까? –

+0

이것은 괜찮을 것입니다 (어떤 점에서 p를 반환한다고 가정). 대역폭 절약이 실제로 그렇게 많은지 궁금합니다. 많은 객체를 반환하거나 트래픽이 많으면 가치가있을 수 있지만 그 중 어느 것도 해당되지 않는 경우 필요하지 않을 수 있습니다. –

+0

@Mystere Man, 나는 그것을 편집한다. 나는 p.를 돌려 보낸다. –

답변

2

ExpandoObject을 사용하고 있습니까?

예를 들어 가다 보면 동적 유형 대신 익명 유형 만 사용할 수 있습니다.

var p = new 
     { 
      ID = person.ID, 
      FirstName = person.FirstName, 
      LastName = person.LastName 
     }; 

이렇게하면 컴파일 타임 검사가 계속 수행됩니다. 그러나 어느 쪽이든 작동해야합니다. 익명 vs 동적에 대한 자세한 내용은 this을 참조하십시오.

0

나에게 잘 보입니다. 다른 열이 필요하면 그들을 반환하고 그들과 함께해야 할 일을하고 익명의 사람을 만들어서 전달하십시오.

0

JSON 또는 SignalR을 사용하여 뷰 또는 클라이언트로 데이터를 반환하는지 여부에 관계없이 MVC의 모범 사례는 강력한 형식의 개체를 사용하는 것입니다. 반환하려는 데이터에 대해 특별히 ViewModel을 만들어서 사용하십시오. 나는 일반적으로 [컨트롤러] [액션] ViewModel 규칙을 사용하여 이러한 클래스의 이름을 지정합니다. 따라서 하나는 MemberDetailsViewModel 일 수 있습니다.

이점은 컴파일 시간 검사, 직렬화의 용이함 및 나중에 수정할 때의 문제 감소가 포함됩니다.

MVC로 처음 시작했을 때 내가 한 일을 정확하게 시도했습니다. 저를 신뢰하십시오, 당신이 지금 얻고 있다는 것을 감지하는 편리함이 가치가 없습니다.

반환되는 데이터가 동적이어야하는 경우 키 값 쌍의 모음을 반환 할 수 있습니다.