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);
    }
     
  • 相关阅读:
    解决 Mac launchpad 启动台 Gitter 图标无法删除的问题
    React 与 React-Native 使用同一个 meteor 后台
    解决 React-Native mac 运行报错 error Failed to build iOS project. We ran "xcodebuild" command but it exited with error code 65. To debug build logs further, consider building your app with Xcode.app, by ope
    一行命令更新所有 npm 依赖包
    swift学习笔记
    IOS语言总结
    focusSNS学习笔记
    别小看锤子,老罗真的很认真
    windowsphone开发页面跳转到另一个dll中的页面
    【令人振奋】【转】微软潘正磊谈DevOps、Visual Studio 2013新功能、.NET未来
  • 原文地址:https://www.cnblogs.com/imust2008/p/5889976.html
Copyright © 2011-2022 走看看