[C#] 강력한 형식의 부분 뷰에 추가 ViewData 전달

ProductImage를 사용하는 강력한 형식의 Partial View가 있으며 렌더링 할 때 포함하는 페이지에서 동적으로 생성하는 추가 ViewData도 제공하고 싶습니다. RenderPartial 호출을 사용하여 강력한 형식의 객체와 사용자 정의 ViewData를 부분 뷰로 전달하는 방법은 무엇입니까?

var index = 0;
foreach (var image in Model.Images.OrderBy(p => p.Order))
{
  Html.RenderPartial("ProductImageForm", image); // < Pass 'index' to partial
  index++;
}



답변

RenderPartial은 단순히 ViewDataDictionary 인 다른 매개 변수를 사용합니다. 당신은 거의 거기에 있습니다.

Html.RenderPartial(
      "ProductImageForm",
       image,
       new ViewDataDictionary { { "index", index } }
); 

이것은 다른 모든 뷰가 기본적으로 가지고있는 기본 ViewData보다 우선합니다. ViewData에 무언가를 추가하는 경우이 새로운 사전에 부분 뷰로 전달되지 않습니다.


답변

womp 게시 내용을 확장하기 위해 다음 과 같은 생성자 오버로드를 사용하는 경우 기존의 View Data를 유지하면서 새로운 View Data를 전달할 수 있습니다ViewDataDictionary .

Html.RenderPartial(
      "ProductImageForm",
       image,
       new ViewDataDictionary(this.ViewData) { { "index", index } }
); 


답변

@Html.Partial("_Header", new ViewDataDictionary { { "HeaderName", "User Management" }, { "TitleName", "List Of Users" } })
or
@{Html.RenderPartial("_Header", new ViewDataDictionary { { "HeaderName", "User Management" }, { "TitleName", "List Of Users" } });}

부분 페이지 (_Header) :

<div class="row titleBlock">
    <h1>@ViewData["HeaderName"].ToString()</h1>
    <h5>@ViewData["TitleName"].ToString()</h5>
</div>


답변

나는 이것이 효과가 없다고 생각합니까?

ViewData["currentIndex"] = index;


답변

강력한 형식의 클래스가 포함 된 다른 클래스를 만듭니다.

수업에 새 물건을 추가하고보기에 반환하십시오.

그런 다음보기에서 새 클래스를 상속하고 오류가 발생할 코드 비트를 변경하십시오. 즉 필드에 대한 참조입니다.

도움이 되었기를 바랍니다. 그렇지 않은 경우 알려 주시면 특정 코드를 게시하겠습니다.


답변

추가 데이터를 전달하는 가장 쉬운 방법은 @Joel Martinez 노트와 같이 뷰의 기존 ViewData에 데이터를 추가하는 것입니다. 그러나 ViewData를 오염시키지 않으려면 RenderPartial에는 표시하는 두 개의 인수 버전뿐만 아니라 세 개의 인수를 취하는 메소드가 있습니다. 세 번째 인수는 ViewDataDictionary입니다. 전달하려는 추가 데이터 만 포함하는 부분에 대해서만 별도의 ViewDataDictionary를 구성 할 수 있습니다.


답변

이것도 효과가 있습니다.

this.ViewData.Add("index", index);

Html.RenderPartial(
      "ProductImageForm",
       image,
       this.ViewData
);