在Visual Studio 2008的Web项目工程里使用Profile

区别于“新建Web站点”,在“Web 项目工程”里并不能直接使用Profile。
相对于普通的“新建Web站点”,我们只需要配置好了,就可以直接在页面的后台文件里引用Profile了,如下:

if (Profile.ShoppingCart != null)
{
      repCart.DataSource = Profile.ShoppingCart.CartItems;
      repCart.DataBind();
}


如果在“Web项目工程”里也这样引用,则会出错:不存在此空间名。
这一点在微软的MSDN里也有说明:
Visual Studio 2008 Web 应用程序项目不会自动包含 ProfileCommon 类。但是,您可以创建自己的 ProfileCommon 类,并在其中包含配置文件系统中已配置项的强类型属性。随后,您可以访问 HttpContext 对象的当前 Profile 属性,以获取并设置这些强类型属性。下面的示例演示如何创建包含在 Class1.cs(对于 Visual Basic 则为 Class1.vb)文件中的自定义 ProfileCommon 类。

下面我们一步步来说明一下如何在项目里引用吧:
第一步:配置Web.Config文件
<profile defaultProvider="AspNetSqlProfileProvider">
  <properties>
    <add name="Teachers"
      type="Teachers"
      allowAnonymous="true" />
  </properties>
</profile>


第二步:建立自己的Profile类:

using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Web.Profile;

namespace WebApplication1
{
    public class ProfileCommon
    {
        public Teachers Teachers
        {
            get
                {
                return (Teachers) HttpContext.Current.Profile.GetPropertyValue("Teachers");
                }
            set
            {
        HttpContext.Current.Profile.SetPropertyValue("Teachers",value);
            }
        }
    }
}


接下来,就可以向必须使用配置文件系统的页中添加名为 Profile 的 ProfileCommon 类的一个实例,如下面的示例所示:

public partial class _Default : System.Web.UI.Page
{
        ProfileCommon Profile = new ProfileCommon();
        protected void Button1_Click(object sender, EventArgs e)
        {
            Teachers teachers = new Teachers();
            teachers.Add(new Teacher("scott"));
            teachers.Add(new Teacher("bob"));
            teachers.Add(new Teacher("paul"));

            Profile.Teachers = teachers;    
        }

        protected void Button2_Click(object sender, EventArgs e)
        {
            GridView1.DataSource = Profile.Teachers;
            GridView1.DataBind();
        }
}