2009-11-04 4 views
1

LINQ to SQL 결과 집합과 List 개체가 포함 된 FormViewModel이 있습니다.ViewData.Model의 필드 값을 필드 문자열 이름으로 참조하는 방법

결과 집합은보기에 표시 할 수있는 모든 가능한 필드 값 집합입니다.

이 목록 특정 것을 AllFields의 필드의 부분 집합의 캐릭터 이름이 포함 (Model.UserFields)가 ... Model.AllFields.Field1, Model.AllFields.Field2이다 사용자가 표시하려고합니다.

목록 (Model.UserFields.ItemSource) 필드 이름 '입력란 3을 ","Field16 "... 포함

내가 item.ItemSource이 문자열 필드 이름입니다이, 수행 할 수있는 방법 : (의사 VB를)

<%For Each item In Model.UserFields%> 
    <td><%=Html.Encode(Model.AllFields(item.ItemSource))%></td> 
<%Next item%> 

가 나는 다른 방식으로 이것을 달성 할 수있는 모델을 바꿀 수 실현하지만,이를 달성하는 방법은 상기와 같은 "간접"참조 통해 있는가?

감사

(아마 충분히 빠른 거의 모든 사용 사례 반드시 가장 빠른하지만)

답변

0

쉬운 방법 중 하나는 반사를 사용하는 것입니다. 내 VB는 약간 녹슬었지만 코드는 다음과 같다.

<%For Each item In Model.UserFields%> 
    <td><%=Html.Encode(Model.AllFields.GetType().GetProperty(item.ItemSource).GetValue(Model.AllFields, Nothing).ToString())%></td> 
<%Next item%> 
+0

위대한 작품. GetValue에 null 값을 처리하는 방법이 있습니까? –

+0

몇 가지 방법이 있지만이 시점에서이 코드의 복잡성은 아마도 인라인보다 더 많을 것입니다. 필드 이름을 허용하고 문자열 값 (또는 값이 null 인 경우 빈 문자열)을 반환하는보기 페이지 (예 : runat = 서버 스크립트 블록)에서 도우미 메소드를 만드는 것이 좋습니다. –

+0

도움 주셔서 감사합니다! –

관련 문제