ASP.NET MVC3의 부분보기에서 ViewBag에 액세스 할 수 없습니다.
뷰를 호출하는 컨트롤러가 있습니다. 뷰에서이 PartialView
될 불리는 @Html.Partial("ViewName", model).
이 작품 벌금.
그러나 controller
뷰백에 무언가를 넣고 싶습니다. 뷰 모델에 놓기 어려운 것을 뷰에 전달합니다. 메인 뷰는에 액세스하는 데 문제가 ViewBag
없지만에서는 PartialView
아무것도 반환하지 않습니다.
ViewBag
이 경우 를 사용할 수 있습니까? 아니면 이 데이터를 뷰에 전달하는 모델 (및에 전달 PartialView
하는 모델과 PartialView
첫 번째 중첩에 전달하는 모델)에 "해킹"해야 PartialView
합니까?
아무 문제없이 작동합니다. 내 HomeController Index 작업에서 ViewBag에 메시지를 추가합니다.
ViewBag.Message = "Welcome to ASP.NET MVC!";
인덱스보기에서 부분보기를 추가합니다.
@Html.Partial("ViewName")
부분보기에서 메시지를 렌더링합니다.
@ViewBag.Message
아래 설명에서 : 모델을 부분보기로 전달할 때 문제가있는 것 같습니다. 그런 다음 원본 ViewBag를 참조 할 수 있습니다.
@ViewContext.Controller.ViewBag.Message
입력 매개 변수 중 하나 인 Html.Partial()
where 의 과부하를 사용하는 경우 viewData
예를 들면 다음과 같습니다.
@Html.Partial("PartialViewName", Model, new ViewDataDictionary(ViewBag))
그러면 부분보기는 원래 ViewBag의 데이터를 볼 수 없습니다.
을 제거하십시오 new ViewDataDictionary(ViewBag)
.
@Html.Partial("PartialViewName", Model)
나는 이것이 약간 오래되었다는 것을 알고 있지만 향후 참조를 위해 ViewContext.Controller.ViewBag.Property를 사용하여이 문제를 해결했습니다. 물론 이것은 액세스하려는 ViewBag 속성이 컨트롤러에 설정되어 있음을 의미하지만 이것이 일반적인 경우라고 생각합니다.
그것은 나를 위해 일한 것입니다.
최근에 나는 같은 문제가 발생했지만, 여기에 대한 답변이었다가의 과부하 사용하지 않는 제안으로 단지 해결 방법 Html.Partial
사용을 viewData
. 그러나 이러한 과부하를 사용해야한다면 정답은 다음과 같습니다.
@Html.Partial(
"PartialViewName",
model_object,
new ViewDataDictionary() { { "Value1InViewBag", ViewBag.Value1InViewBag }, { "Value2InViewBag", ViewBag.Value2InViewBag } }
)
나는 당신이 다른 것을 전달해야하고 ViewDataDictionary
(예 : 변경하기 위해 우리에게) 이 답변을 사용해야한다고 생각 HtmlFieldPrefix
하며 뷰에서 어떤 부분 뷰가 필요한지 알아야 ViewBag
하므로 ViewBag에서 모든 매개 변수의 이름을 지정하는 것이 문제가되지 않습니다. ViewBag
부분보기에서 사용되는 새 항목으로 복사됩니다 (분명히의 ViewBag
값을 사용함 ViewData
).
> 일반적인 시나리오에서 Html.Partial을 사용하는 경우;
Html.Partial("partialViewName");
parentView를 위해 전송 된 Model은 partialViewName에서 사용할 수 있습니다. 또한 parentView로 전송되는 ViewData는 partialViewName에도 사용할 수 있습니다.
> 특수한 경우로 Html.Partial을 사용하고 Model ..
Html.Partial("partialViewName", newModel);
parentView를 위해 전송 된 모델에 도달 할 수 없습니다. 따라서 지금부터 partialViewName에서 활성화 된 Model은 newModel입니다. parentView로 보내는 viewData는 partialViewName에도 사용할 수 있습니다.
> 특수한 경우로 Html.Partial을 사용하고 ViewDataDictionary를 보내려는 경우 ..
parentView로 전송되는 Model은 partialViewName에도 사용할 수 있습니다.
나는.
@Html.Partial("partialViewName", new ViewDataDictionary { { "key", value }, { "key2", value2 } })
여기서 parentView를 위해 보낸 ViewData는 'new ViewDataDictionary'로 덮어 씁니다.
여기서 parentView 용 ViewBag가 있으면 위와 같은 코드를 작성하면 도달 할 수 없습니다.
II.
ViewDataDictionary viewDataDictionary = new ViewDataDictionary();
viewDataDictionary.Add("key", value);
viewDataDictionary.Add("key2", value2);
@Html.Partial("partialViewName", viewDataDictionary)
이 사용법은 첫 번째 (I.)와 동일합니다.
III.
ViewDataDictionary viewDataDictionary = ViewData; //If you use this code block, ViewBag which is sent for parent View is not lost.
viewDataDictionary.Add("key", value);
viewDataDictionary.Add("key2", value2);
@Html.Partial("partialViewName", viewDataDictionary)
이 코드 블록을 사용하면 partialViewName의 parentView에 대해 전송되는 ViewData 및 ViewBag에 도달 할 수 있습니다.
내 시나리오는 Model로 부분보기가 IEnumerable<SampleModel>
있었지만 사용하여 전달해야했습니다 .Coz Model.SampleModelList는null
@Html.Partial("PartialViewName", Model.SampleModelList, new ViewDataDictionary())
간단한 해결책은 PartialView가 View의 일부이기 때문에 View의 모든 요소는 PartialView에서 액세스 할 수 있으므로 ViewBag 대신 ViewBag 데이터를 View html의 데이터 요소로 설정했습니다.
<div class="showcase-heading" id="dvValue" data-id="@Model.ContentId">@Model.Name</div>
매우 기본적인 페이지에서 이와 동일한 문제가 발생했습니다.
@Html.Partial("_AppIntro")
<div class="form-group row">
<div class="col-md-10">
<a href="/Ag/Application/1" class="btn btn-default btn-primary">Next</a>
</div>
</div>
And the partial view contained only text with some references to ViewBag to fetch some dynamic values passed from the controller. It turned out that the name of the partial view mattered. Removing the partial page and recreating it with Add -> View -> MVC 5 View but naming the page _AppIntro.cshtml fixed it.
ReferenceURL : https://stackoverflow.com/questions/5729784/cant-access-viewbag-in-a-partial-view-in-asp-net-mvc3
'IT이야기' 카테고리의 다른 글
std :: string 구현 (0) | 2021.04.08 |
---|---|
SQL IN 연산자에 해당하는 linq는~? (0) | 2021.04.08 |
DbContext 스레드는 안전할까? (0) | 2021.04.08 |
URL을 일반 Windows 파일 이름 Java로 변환 (0) | 2021.04.08 |
bash 함수 반환 값을 테스트하는 적절한 방법 (0) | 2021.04.08 |