Asp.net MVC 사용자 컨트롤 ViewData
-
09-06-2019 - |
문제
컨트롤러가 모델을 기반으로 뷰를 렌더링할 때 인덱서를 사용하여 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 컬렉션에 추가되어야 하는 것 같습니다.
나는 정말로 내 자신의 질문에 대답하는 것을 그만둬야 합니다 :(
제휴하지 않습니다 StackOverflow