Asp.net MVC User Control ViewData


5

컨트롤러가 모델을 기반으로 뷰를 렌더링 할 때 인덱서 (ViewData [ "Property"])를 사용하여 ViewData 컬렉션에서 속성을 가져올 수 있습니다. ,

<%= ViewData["DisplayMessage"] %> 

내가이 제대로 DisplayMessage 렌더링 것이라고 생각 :

return View("Message", new { DisplayMessage = "This is a test" }); 

내 메시지 제어에 나는이 있었다 그러나, 나는 다음과 같은 사용하여 전화를 시도 공유 사용자가 제어 할 수 있습니다 그러나 null이 리턴됩니다. 주변에 땜질의 무거운 복용량 후, 나는 마침내 강하게 내 사용자 컨트롤 입력하기 위해 "MessageData"클래스를 만들었 :

public class MessageControl : ViewUserControl<MessageData> 

을 지금이 호출은 작동합니다

return View("Message", new MessageData() { DisplayMessage = "This is a test" }); 

과 같이 표시 할 수 있습니다 이 다음 DisplayMessage 속성은 사용자 컨트롤 강력한 입력하지 않고도을 ViewData (. 즉을 ViewData [ "DisplayMessage"]) 컬렉션에 추가되지 않을 것이다 왜

<%= ViewData.Model.DisplayMessage %> 

? 디자인에 의한 것인가? ViewData에 "DisplayMessage"에 대한 키가 포함되어있는 것이 합리적이지 않습니까? 물론

6

ViewData.Eval("DisplayMessage") 

당신을 위해 작동해야하는 방법을 응답 중지해야합니다.


2

나는이 질문에 분명히이 때문에 래퍼 클래스의 일이 나는 즉시 http://forums.asp.net/t/1197059.aspx

구글

에 몇 검색 후 답변을 찾을를 만든 후. 그렇더라도 기본적으로 전달 된 모든 속성이 ViewData 컬렉션에 추가되어야합니다.

은 정말 내 자신의 질문 :(