Html.RenderPartial call from masterpage这是一个场景:假设我的网站上有两个负责显示不同类型内容的控制器-页面和文章。 我需要将"部分视图"嵌入我的母版页,该母版页将列出按某些条件过滤的页面和文章,并显示在每个页面上。 我无法在母版页上设置模型(是吗?)。 如何使用Html.RenderPartial解决此任务?
[编辑] 如何创建HtmlHelper扩展方法,该方法允许您在控制器上的action上调用部分视图结果。 就像是
然后您可以在母版页中使用它,例如
并在您的控制器中使用适当的方法
好吧那还是我的2美分 我认为您的解决方案可能属于MVC 2.0 RC以及其他领域。 菲尔·哈克(Phil Haack)在他的博客上发表了一篇文章:http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx 我有一个类似的帖子,并提出了一个对象模型来处理它。 我讨厌这种非强类型的视图,因此采用了这种方法,并且效果很好。 这是一个很晚的回复,但是我在谷歌搜索时转到了此页面-因此其他人也可能会看到此问题(以及我的回复)。 解决此问题的方法是使用简单的jQuery脚本加载PartialView并执行其控制器代码。下面的示例。
这种方法的最大缺点是,客户端必须启用脚本才能正常工作(因此,它对SEO确实不友好)。如果可以的话,您可以忍受它很好地工作。我只在Intranet网站上使用它,因为我知道每个客户端都启用了JavaScript,而我不必担心Google的机器人。 我处理此问题的方法是使用BaseViewModel。所有视图都是根据继承自BaseViewModel的视图模型强类型化的。 BaseViewModel类具有MasterPage所需的所有信息。因此,为了导航,您的BaseViewModel可能看起来像这样:
在您的MasterPage和PartialViews中,可以将模型转换为BaseViewModel并访问NavigationsItems属性。
是的,这是正确的。但让我们看一下这种情况: Html.RenderPartial(" articlesView",ViewData [" articles]]) Html.RenderPartial(" pagesView",ViewData [" pages"]) 在我的母版页上,在ViewDataDictionary既不包含文章也不包含页面的每个页面上都会引发异常。 至少,这就是我的看法。 ViewData Model属性仅应用于在UI的主要部分上查看/编辑的内容。 视图的其他部分可能需要ViewData中存在一些数据,因此只需将其添加到字典中即可。 我只是将像这样的字典中的数据传递给ViewData [" articles"]。 (或MvcContrib的ViewData.Get())。 您可能还会看看MvcContrib中实现的最近实现的SubController模式。 |