如何在asp.net mvc中创建一个将返回当前PageData的包装器
本文关键字:返回 一个 PageData 包装 net asp mvc 创建 | 更新日期: 2023-09-27 18:04:46
我想创建一个包装器类,让我使用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
PageData仅在页面本身内可用,在其他任何地方(如控制器)都不可用。最好的方法是使用扩展方法。
Frederik Vig写了一篇博客文章,展示了如何做到这一点。
的例子:
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智能感知,不会使它太混乱,并允许你过滤掉PageData方法从扩展方法。 创建你的静态类,就像你想要的,但使用方法而不是属性。
的例子:
public static class Utils
{
public static string UserName(IDictionary<object,dynamic> pageData) {
return pageData["UserName"] as string;
}
}
然后在你的代码中这样做(假设你在你的视图中有正确的@using语句):
@Utils.UserName(PageData)