无法在ASP.NET MVC3的部分视图中访问ViewBag
我有一个控制器调用一个视图。 在视图中有一个名为be @Html.Partial("ViewName", model).
的PartialView
@Html.Partial("ViewName", model).
这工作正常。
但是在controller
我希望在视图中放入一些东西,这样我就很难把视angular放到视图中去。 主视图访问ViewBag
没有问题,但在PartialView
中不返回任何东西。
在这种情况下是否可以使用ViewBag
,或者我应该将这些数据“转入”我传递给视图的模型(并将模型传递给PartialView
,并将模型传递给嵌套在PartialView
中的PartialView
) ?
这应该没有任何问题。 在我的HomeController索引操作中,我向ViewBag添加一条消息:
ViewBag.Message = "Welcome to ASP.NET MVC!";
在索引视图上添加部分视图:
@Html.Partial("ViewName")
在部分视图上,我呈现了这个消息:
@ViewBag.Message
完美的作品。 你还干了什么? 可能是打字错误?
如果使用Html.Partial()
的重载,其中viewData
是input参数之一,例如:
@Html.Partial("PartialViewName", Model, new ViewDataDictionary(ViewBag))
那么你的局部视图将不会看到你的原始ViewBag中的数据。
删除new ViewDataDictionary(ViewBag)
,所以你应该写
@Html.Partial("PartialViewName", Model)
TehOne在评论中说:
我知道这是有点旧,但为了将来的参考,我解决了这个通过使用ViewContext.Controller.ViewBag.Property。 当然,这意味着您试图访问的ViewBag属性是在控制器中设置的,但我认为这是一个常见的情况。
这是为我工作。
最近我遇到了同样的问题,但是这里的答案只是解决方法,因为他们build议不要使用viewData
重载viewData
。 但是如果你不得不使用这些重载,我相信正确的答案是:
@Html.Partial( "PartialViewName", model_object, new ViewDataDictionary() { { "Value1InViewBag", ViewBag.Value1InViewBag }, { "Value2InViewBag", ViewBag.Value2InViewBag } } )
我认为这个答案应该用来传递不同的ViewDataDictionary
(例如我们用它来改变HtmlFieldPrefix
),因为在视图中你应该知道在ViewBag
需要什么局部视图,所以它不应该成为问题, ViewBag中的参数被复制到局部视图中使用的新ViewBag
(显然, ViewBag
使用ViewData
值)。
我的senario是,我用Model IEnumerable<SampleModel>
部分视图然而,我不得不通过使用,因为Model.SampleModelList可以为null
@Html.Partial("PartialViewName", Model.SampleModelList, new ViewDataDictionary())
简单的解决scheme是因为PartialView现在也是View的一部分View上的每个元素都可以通过PartialView访问,所以我没有将ViewBag数据设置为View html上的数据元素,而不是ViewBag。
<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>
部分视图仅包含带有对ViewBag的一些引用的文本,以获取从控制器传递的一些dynamic值。 原来,部分视图的名称是重要的。 删除部分页面并使用添加 – >查看 – > MVC 5视图重新创build它,但命名该页面_AppIntro.cshtml修复它。