여기서 동적 유형을 사용하면 어떤 이점이 있습니까?
ViewData 사전을 사용하면 매우 쉽게 임의의 개체/항목을보기 출력에 추가 할 수 있습니다.
보기 내에서 속성 이름을 가져 오기 위해 리플렉션을 수행 할 필요가 없습니다. ViewData.Keys
을 사용하면 이름 모음을 얻을 수 있습니다.
편집 : 난 그냥 내 자신 역학에 대해 조금 더 배운 내가 어쩌면 당신이 DynamicObject에서 상속 자신의 동적 객체 클래스를 만들 필요가 있다고 생각합니다. 해당 클래스에 비공개 사전이 있고 TrySetMember
및 TryGetMember
을 무시하고 싶을 것입니다.
편집 : 강력한 형식의 ViewModel의 한 가지 이점은 POST Action 메서드의 매개 변수로 받아 들일 수 있다고 생각합니다. MVC 프레임 워크는 모델 바인딩을 처리 할 것이고 액션 메소드에서 ViewModel 클래스의 인스턴스를 간단히 가질 수 있습니다. 나는 그들이 일을해도 당신이 역동적 인면에서 이점을 얻지 못할 것이라고 생각합니다.
편집 결과 : 글쎄, DynamicObject에서 파생 된 클래스를 사용했지만 뷰를 렌더링하려고 할 때 VS2010이 충돌합니다. 어떤 예외도 발생하지 않으며 하드 충돌이 발생하고 Visual Studio가 다시 시작됩니다. 충돌을 일으킨 원인은 다음과 같습니다.
사용자 정의 동적 클래스 : 컨트롤러에서
public class DynViewModel : DynamicObject
{
private Dictionary<string, object> ViewDataBag;
public DynViewModel()
{
this.ViewDataBag = new Dictionary<string, object>();
}
public override bool TrySetMember(SetMemberBinder binder, object value)
{
this.ViewDataBag[binder.Name] = value;
return true;
}
public override bool TryGetMember(GetMemberBinder binder, out object result)
{
result = this.ViewDataBag[binder.Name];
return true;
}
}
:
public ActionResult DynamicView()
{
dynamic p = new DynamicViewModel.Models.DynViewModel();
p.Name = "Test";
p.Phone = "111-2222";
return View(p);
}
내보기는 기본적으로 질문에 나열된 것과 동일합니다
<p>Name: <%=Model.Name %></p>
<p>Phone: <%=Model.Phone %></p>
내 결론 :이 방법이 효과가있을 수 있지만 VS2010의 베타 1에서는 내 코드로 인해 Visual Studio가 중단되는 이유를 찾아냅니다. 역학을 배우는 흥미로운 연습이기 때문에 VS2010 베타 2에서 다시 시도해 보겠습니다. 그러나 이것이 작동한다고해도 ViewData 사전을 사용하는 것보다 여전히 이점이 없습니다.
Phil Haack을 구하기 위해! Phil Haack의 블로그 게시물을 통해 도움을받을 수 있습니다. 그것은 당신이 찾고 있었던 것처럼 보입니다. Fun With Method Missing and C# 4
당신이 코드의 자세한 내용을 게시 할 수 확인 ? 보기에 특히 생성자를보고 싶습니다. – Randolpho
Phil Haack의 블로그 게시물 링크가있는 최신 업데이트를 확인하십시오. – CoderDennis