2010-01-27 5 views
2

문자열 속성이 많은 "채널"이라는 모델이 있습니다.컨트롤러/http.context없이 모델 바인딩

해시 테이블을 반환하는 데이터 소스에서 데이터를 가져옵니다. 이 테이블의 키는 내 모델의 속성 이름과 일치합니다.

어떻게 해시 테이블을 채널 모델에 자동 바인딩 할 수 있습니까?

ASP.NET MVC의 바인더가이 작업을 수행하는 것처럼 보이지만 컨텍스트가있는 컨트롤러에서 사용해야합니다. 데이터를 가져올 때 작동하도록 컨텍스트를 내 저장소에 전달하고 싶지 않습니다. 당신이 필요로하는 모든 사용자들은

public static T Bind<T>(IDictionary<string, string> hash, T channel) 
{ 
    foreach (var item in hash) 
    { 
     var prop = typeof(T).GetProperty(item.Key); 
     prop.SetValue(channel, Convert.ChangeType(item.Value, prop.PropertyType), new object[0]); 
    } 
} 

:

+0

반사가 옵션입니까? 그게 .net 방법입니다. –

+0

의심의 여지가, 난 그냥 처음부터 그것을 쓰고 싶지 않아 - 거기에 기존 바인더가 있어야합니다 :) – typemismatch

답변

1

방법 자체는 그냥 그것을 위해 "기존"솔루션 기대할 수 없을 정도로 간단하다 (나는 내가 할 수있는 생각하지만, 필요한 경우). 이제이 메소드를 컨트롤러없이 독립형으로 사용하거나이를 사용하는 모델 바인더를 작성할 수 있습니다.

중첩 된 속성에 대한 추가 작업이 필요할 수 있지만 필요하지는 않습니다. 재귀를 사용하여 작성하는 데는 5 분이 더 걸립니다.