문제

컨트롤러가 모델을 기반으로 뷰를 렌더링할 때 인덱서를 사용하여 ViewData 컬렉션에서 속성을 가져올 수 있습니다(예:ViewData["속성"]).그러나 다음을 사용하여 호출하려고 시도한 공유 사용자 컨트롤이 있습니다.

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

내 메시지 컨트롤에는 다음이 포함되었습니다.

<%= ViewData["DisplayMessage"] %>

이것이 DisplayMessage를 올바르게 렌더링할 것이라고 생각하지만 null이 반환됩니다.많은 고민 끝에 마침내 사용자 정의 컨트롤을 강력하게 입력하기 위해 "MessageData" 클래스를 만들었습니다.

public class MessageControl : ViewUserControl<MessageData>

이제 이 호출이 작동합니다.

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

다음과 같이 표시될 수 있습니다.

<%= ViewData.Model.DisplayMessage %>

DisplayMessage 속성이 ViewData에 추가되지 않는 이유는 무엇입니까(예:사용자 컨트롤을 강력하게 입력하지 않고 ViewData["DisplayMessage"]) 컬렉션을 수집하시겠습니까?이것은 의도적으로 설계된 것입니까?ViewData에 "DisplayMessage"에 대한 키가 포함된다는 것이 말이 되지 않나요?

도움이 되었습니까?

해결책

방법

ViewData.Eval("DisplayMessage") 

당신을 위해 일해야합니다.

다른 팁

물론 이 질문을 만든 후 Google에서 몇 번 더 검색하면 즉시 답을 찾을 수 있습니다.

http://forums.asp.net/t/1197059.aspx

분명히 이것은 래퍼 클래스 때문에 발생합니다.그럼에도 불구하고 전달된 모든 속성은 기본적으로 ViewData 컬렉션에 추가되어야 하는 것 같습니다.

나는 정말로 내 자신의 질문에 대답하는 것을 그만둬야 합니다 :(

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top