关于asp.net:Html.RenderPartial从母版页调用

关于asp.net:Html.RenderPartial从母版页调用

Html.RenderPartial call from masterpage

这是一个场景:假设我的网站上有两个负责显示不同类型内容的控制器-页面和文章。 我需要将"部分视图"嵌入我的母版页,该母版页将列出按某些条件过滤的页面和文章,并显示在每个页面上。 我无法在母版页上设置模型(是吗?)。 如何使用Html.RenderPartial解决此任务?

[编辑]
是的,我可能会创建单独的局部视图来列出文章和页面,但是仍然存在一个障碍,我不能也不应在母版页上设置模型。 我需要以某种方式说"这是页面"作为我的renderpartial和文章的参数。 renderpartial与母版页中来自数据库的数据的整个概念对我来说有点模糊。


如何创建HtmlHelper扩展方法,该方法允许您在控制器上的action上调用部分视图结果。

就像是

1
2
3
4
5
6
 public static void RenderPartialAction<TController>(this HtmlHelper helper, Func<TController, PartialViewResult> actionToRender)
    where TController : Controller, new()
{
    var arg = new TController {ControllerContext = helper.ViewContext.Controller.ControllerContext};
    actionToRender(arg).ExecuteResult(arg.ControllerContext);
}

然后您可以在母版页中使用它,例如

1
<% Html.RenderPartialAction((HomeController x) => x.RenderPartial()) %>

并在您的控制器中使用适当的方法

1
2
3
4
5
public PartialViewResult RenderPartial()
{

     return PartialView("~/Path/or/View",_homeService.GetModel())
}

好吧那还是我的2美分


我认为您的解决方案可能属于MVC 2.0 RC以及其他领域。

菲尔·哈克(Phil Haack)在他的博客上发表了一篇文章:http://haacked.com/archive/2009/11/18/aspnetmvc2-render-action.aspx


我有一个类似的帖子,并提出了一个对象模型来处理它。

我讨厌这种非强类型的视图,因此采用了这种方法,并且效果很好。


这是一个很晚的回复,但是我在谷歌搜索时转到了此页面-因此其他人也可能会看到此问题(以及我的回复)。

解决此问题的方法是使用简单的jQuery脚本加载PartialView并执行其控制器代码。下面的示例。

1
2
3
4
5
6
7
8
9
    <script type="text/javascript">
            $(document).ready(function() {
            $("#applicationForm").load("/Home/ApplicationForm");
            });
   

   

</asp:Content>

这种方法的最大缺点是,客户端必须启用脚本才能正常工作(因此,它对SEO确实不友好)。如果可以的话,您可以忍受它很好地工作。我只在Intranet网站上使用它,因为我知道每个客户端都启用了JavaScript,而我不必担心Google的机器人。


我处理此问题的方法是使用BaseViewModel。所有视图都是根据继承自BaseViewModel的视图模型强类型化的。

BaseViewModel类具有MasterPage所需的所有信息。因此,为了导航,您的BaseViewModel可能看起来像这样:

1
2
3
4
5
6
7
8
public class BaseViewModel
{
    public BaseViewModel()
    {
         NavigationItems = RetrieveNavigationItemsFromModel();
    }
    public List<NavItems> NavigationItems {get; set;}
}

在您的MasterPage和PartialViews中,可以将模型转换为BaseViewModel并访问NavigationsItems属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
<ul>

<% foreach (NavItem ni in (Model as BaseViewModel).NavigationItems) { %>
   
<li>

       " alt="<%= ni.Alt%>"><%= ni.DisplayText %>
   
</li>

<% } %>

</ul>

是的,这是正确的。但让我们看一下这种情况:
在与文章相关的视图上,我有ViewData [" article"],在与页面相关的视图上,我有ViewData [" pages"],但是我并没有始终都有文章和页面。因此,如果我添加:

Html.RenderPartial(" articlesView",ViewData [" articles]])

Html.RenderPartial(" pagesView",ViewData [" pages"])

在我的母版页上,在ViewDataDictionary既不包含文章也不包含页面的每个页面上都会引发异常。

至少,这就是我的看法。


ViewData Model属性仅应用于在UI的主要部分上查看/编辑的内容。

视图的其他部分可能需要ViewData中存在一些数据,因此只需将其添加到字典中即可。

我只是将像这样的字典中的数据传递给ViewData [" articles"]。 (或MvcContrib的ViewData.Get())。

您可能还会看看MvcContrib中实现的最近实现的SubController模式。


推荐阅读

    linux编译时显示命令?

    linux编译时显示命令?,系统,基础,工具,代码,百度,下来,网上,命令,内核,文件,L

    显示linux网卡命令行?

    显示linux网卡命令行?,系统,信息,工具,网络,服务,电脑,网卡,技术指标,地址,

    linux命令显示内容?

    linux命令显示内容?,标准,系统,数据,命令,百度,实时,时间,信息,文件,内容,lin

    linux常用显示命令?

    linux常用显示命令?,工作,地址,系统,信息,管理,命令,目录,标准,功能,常用命

    linux命令行同步显示?

    linux命令行同步显示?,地址,工具,系统,数据,工作,时间,命令,综合,网址,信息,L

    脚本调用linux命令?

    脚本调用linux命令?,代码,系统,工作,底部,脚本,位置,环境,行用,官网,标准,typ

    linux分页显示命令?

    linux分页显示命令?,工具,通信,命令,数据,信息,管道,标准,位置,一致,系统,lin

    linux中ps命令显示?

    linux中ps命令显示?,系统,信息,状态,进程,命令,多地,软件,工作,基础,报告,lin

    linux命令逐页显示?

    linux命令逐页显示?,系统,工作,地址,命令,网上,信息,百度,基础,标准,内容,在l

    调用函数命令linux?

    调用函数命令linux?,系统,管理,网络,通用,统一,观察,地址,代码,设备,地方,怎

    linux显示内核命令?

    linux显示内核命令?,地址,发行,信息,工具,电脑,系统,名称,内核,版本,状态,如

    显示等号linux命令?

    显示等号linux命令?,工作,地址,信息,系统,命令,目录,标准,管理,基础,常用命

    linux中显示路径命令?

    linux中显示路径命令?,系统,地址,工作,信息,时间,命令,数据,网络,路径,名字,l

    linux显示的命令行?

    linux显示的命令行?,信息,标准,数据,命令,实时,系统,时间,名称,文件,文件名,l

    linux命令多显示几行?

    linux命令多显示几行?,实时,系统,标准,数据,档案,命令,文件,最新,信息,状态,l

    linux命令行显示键值?

    linux命令行显示键值?,系统,环境,管理,文化,国家,信息,工具,数据,软件,项目,L

    linux用命令显示键盘?

    linux用命令显示键盘?,系统,信息,工具,电脑,键盘,分析,设备,数据,通用,工作,L

    linux命令分行显示?

    linux命令分行显示?,数据,分行,系统,时间,最新,百度,实时,命令,文件,内容,lin

    linux内核总调用命令?

    linux内核总调用命令?,工作,地址,系统,信息,管理,策略,命令,目录,时间,基础,

    linux编程调用命令?

    linux编程调用命令?,系统,标准,管理,工作,基础知识,情况,环境,设备,基础,首