首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法在ASP.NET MVC3的分部视图中访问ViewBag

无法在ASP.NET MVC3的分部视图中访问ViewBag
EN

Stack Overflow用户
提问于 2011-04-20 19:53:42
回答 6查看 85.7K关注 0票数 58

我让一个控制器调用一个视图。在视图中有一个名为be @Html.Partial("ViewName", model).PartialView,它可以很好地工作。

但是在controller中,我希望把一些很难放到视图模型中的东西放在视图包中,我将其传递给视图。主视图访问ViewBag没有问题,但在PartialView中它不返回任何内容。

在这种情况下,是否可以使用ViewBag,或者我是否应该将此数据“黑”到传递给视图的模型中(传递给PartialView的模型,以及传递给嵌套在第一个PartialView中的PartialView的模型)?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-04-21 05:54:35

这应该不会有任何问题。在我的HomeController索引操作中,我向ViewBag添加了一条消息:

代码语言:javascript
复制
ViewBag.Message = "Welcome to ASP.NET MVC!";

在索引视图中,我添加了部分视图:

代码语言:javascript
复制
@Html.Partial("ViewName")

在局部视图上,我呈现消息:

代码语言:javascript
复制
@ViewBag.Message

来自下面的评论:当你将一个模型传递到局部视图时,似乎有一个问题。然后,您可以使用以下命令引用原始ViewBag

代码语言:javascript
复制
@ViewContext.Controller.ViewBag.Message
票数 58
EN

Stack Overflow用户

发布于 2013-06-17 19:56:31

如果您正在使用Html.Partial()的重载,其中viewData是输入参数之一,例如:

代码语言:javascript
复制
@Html.Partial("PartialViewName", Model, new ViewDataDictionary(ViewBag))

这样,您的局部视图将看不到原始ViewBag中的数据。

删除new ViewDataDictionary(ViewBag),这样您就应该编写

代码语言:javascript
复制
@Html.Partial("PartialViewName", Model)
票数 33
EN

Stack Overflow用户

发布于 2015-05-23 06:29:03

最近我遇到了同样的问题,但这里的答案只是变通方法,因为他们建议不要使用viewDataHtml.Partial重载。但是如果你必须使用这些重载,我相信正确的答案是:

代码语言:javascript
复制
@Html.Partial(
     "PartialViewName",
     model_object,
     new ViewDataDictionary() { { "Value1InViewBag", ViewBag.Value1InViewBag }, { "Value2InViewBag", ViewBag.Value2InViewBag } }
)

我认为如果你需要传递不同的ViewDataDictionary (例如我使用它来改变HtmlFieldPrefix),并且因为在视图中你应该知道在ViewBag中需要什么部分视图,所以命名ViewBag中的所有参数以复制到部分视图中使用的新ViewBag中应该不成问题(显然ViewBag使用来自ViewData的值)。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5729784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档