zoukankan      html  css  js  c++  java
  • RenderPage()加载局部页和传递数据

    System.Web.WebPages.WebPageBase类的方法
    public override HelperResult RenderPage(string path, params object[] data);

    以下三种方式:
    System.Web.WebPages.WebPageBase.PageData属性(public override IDictionary<object, dynamic> PageData)
    System.Web.WebPages.WebPageBase.Page属性(public override dynamic Page)
    System.Web.WebPages.WebPage.Model属性(public dynamic Model),注意区分System.Web.Mvc.WebViewPage.Model属性(public object Model)

    index.cshtml 传递数据
    @RenderPage("/_Footer.cshtml",
    new { Title ="文档标题", Author=“作者” },new { Name="姓名", Age=23}
    )

    _Footer.cshtml 接收数据
    1,PageData/Page key的方式,只能取到data数组的第一个值,并将其属性转为key,属性值转为value
    <p>@PageData["Title"] , @PageData["Author"] </p> 输出: 文档标题,作者 ,注意这里的key不区分大小写
    <p>@PageData["Name"] , @PageData["Age"] </p> 输出:null

    或者使用Page属性
    <p>@Page.Title , @Page.Author </p> 输出: 文档标题,作者 ,注意这里的key不区分大小写
    <p>@Page.Name , @Page.Age </p> 输出:null
     
    2,PageData索引的方式,data数组都可以输出
    _Footer.cshtml 接收数据

    <p>@PageData[0]</p> 输出:{ Title = "标题", Author = "作者" }
    <p>@PageData[1]</p> 输出:{ Name = "姓名", Age = 23 }
    <p>@PageData[2]</p> 输出:null,不报异常!!
    总结:通过key的方式,只能取到参数data的第一个值;通过索引方式可以按照顺序取出data的所有值

    3,Model属性取数据
    _Footer.cshtml 接收数据
    <p>@Model.Title , @Model.Author</p> 可以取到
    <p>@Model.Name , @Model.Age</p>这个取不到

    data数组的第一个匿名类赋值给了
    WebPage类的Model属性,因此可以使用”@Model.匿名类属性“ 的方式访问到。
    类似 PageData["key"]/Page.key的方式,只能取到data数组的第一个值,优点是比PageData["key"]方式灵活,跟Page.key类似
    //分析源代码,只有第二个参数会被转为model(System.Web.WebPages.WebPageBase类)
    private WebPageContext CreatePageContextFromParameters(bool isLayoutPage, params object[] data)
    {
        object model = null;
        if (data != null && data.Length > 0)
        {
            model = data[0];//只有第一个参数会转为model
        }
        IDictionary<object, object> pageData = PageDataDictionary<object>.CreatePageDataFromParameters(this.PageData, data);
        return WebPageContext.CreateNestedPageContext<object>(base.PageContext, pageData, model, isLayoutPage);
    }
     
  • 相关阅读:
    python技巧31[移植python2.x到3.x]
    python转载[正则表达式指南]
    Linux守护进程(init.d和xinetd)
    系统host文件的使用
    python技巧31[python文件的encoding和str的decode]
    python类库26[读写mysql]
    Windows批处理中文件的属性
    python类库31[读取环境变量]
    python基础31[python内置函数列表]
    文件共享和存储服务器
  • 原文地址:https://www.cnblogs.com/imust2008/p/5889976.html
Copyright © 2011-2022 走看看