我想创建一个包装类,让我使用PageData,因为它是一个强类型的类
我之前在asp.net中使用此方法使用HttpContext.Current.Session来定义我可以存储在会话中的所有项目,并且会话的所有操作都是通过该类完成的。
示例
namespace app.Web
{
public static class Session
{
public string UserName
{
get { return HttpContext.Current.Session["UserName"] as string; }
set { HttpContext.Current.Session["UserName"] = value; }
}
...........
}
}
我想知道如何以类似的方式获取Pagedata。
答案 0 :(得分:2)
PageData仅在页面本身可用,在其他任何地方都不可用(如控制器)。执行此操作的最佳方法是使用扩展方法。
Frederik Vig写了一篇blog post来展示如何做到这一点。
示例:
namespace PageData.Extensions
{
public static partial class PageDataExtensions
{
public static string UserName(this PageData page)
{
return page["UserName"] as string;
}
}
}
顺便说一下,您也可以使用相同的Session方法,这可能比您提出的方法更清晰。
编辑:
根据您的评论,还有其他几种选择。
PageData.Utils.UserName
这种方式将它添加到PageData intellisense中并且不会使它太杂乱,并且允许你从扩展方法中过滤掉PageData方法。示例:
public static class Utils
{
public static string UserName(IDictionary<object,dynamic> pageData) {
return pageData["UserName"] as string;
}
}
然后在您的代码中执行此操作(假设您在视图中有正确的@using语句):
@Utils.UserName(PageData)