RenderPage()加载局部页和传递数据

Posted 分而治之

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了RenderPage()加载局部页和传递数据相关的知识,希望对你有一定的参考价值。

public override HelperResult RenderPage(string path, params object[] data);

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

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

2,索引的方式,data数组都可以输出

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

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

_Footer.cshtml
<p>@Model.Title , @Model.Author</p> 可以取到
<p>@Model.Name , @Model.Age</p>这个取不到

总结:
Model是System.Web.WebPages.WebPage类的只读属性,public dynamic Model { get; }
类似 PageData[key]的方式,只能取到data数组的第一个值,优点时比PageData[key]方式灵活
//分析源代码,只有第二个参数会被转为model
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);
}

 

 

以上是关于RenderPage()加载局部页和传递数据的主要内容,如果未能解决你的问题,请参考以下文章

分页和文件上传

jqgrid 如何获取分页的信息:当前页和总页数,作为参数传递到url

混合编程jni 第九篇之Jni总结

将任意数据从局部视图传递到布局视图

将数据从局部视图传递到父视图

带你深入理解传递參数