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);
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM