算是摸了点ASP.NET2.0的皮毛,这里我主要写写Profile服务,即针对用户收藏架那块。
.开发软件:.NET2005和SQL2005Express版本。
SQL2000也能完成这个项目,只不过在最初我使用SQL2000时,打开源码会有末名奇妙BUG,说连不上SQL2005…..我当时还没装SQL2005呢....
折腾了半天,把能试的都试遍了就差重装系统了。发现是微软的一个BUG!,网上说是现在要付费才给弄,最后按一个网友说的直接删除一个文件
才算平息。
.MyComics是一个网站书店,整体来讲,具备的业务功能有,算是需求分析吧:
. 对漫画书的列表可以按不同的字段进行排序
. 查看漫画书的详细资料,包括图片
. 将选中的漫画书添加到收藏架
. 收藏架中的漫画书下次登陆时仍然存在
.实施方案:
1.创建数据库,实现商品查看与管理功能。
2.实现商品查看与管理功能:主要利用GRIDVIEW,DataList,ObjectDataSource,SQLDataSource四个控件完成。
3.创建网站母版,规划网站风格.
GO
USE MyComics
GO
CREATE TABLE [Books] (
[ComicID] [int] IDENTITY (100, 1) NOT NULL ,
[Title] [varchar] (64) NOT NULL ,
[Number] [smallint] NOT NULL ,
[Year] [smallint] NOT NULL ,
[Grade] [decimal](3, 1) NOT NULL ,
[CGC] [bit] NOT NULL ,
[BookValue] [money] NULL DEFAULT (0) ,
[LargeCover] [varchar] (64) NOT NULL ,
[SmallCover] [varchar] (64) NULL ,
[Comment] [varchar] (512) NULL ,
CONSTRAINT [PK_Books] PRIMARY KEY CLUSTERED
(
[ComicID]
) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT INTO Books (Title, Number, Year, Grade, CGC, BookValue,LargeCover, SmallCover, Comment)
VALUES ('Bugslayer Comics', 1, 2001, 9.0, 0, 45.00,'mm_01.jpg', 'mm_01_small.jpg',
'First title in the Bugslayer Comics series.')
4.收藏架(Favorites)的实现,Profile的应用。
以往的做法就是在数据库里建表,通过ADO.NET的代码,连接数据库,把想收藏的书目的相关信息存进数据库,实现数据存储。
Profile服务:它能保存个人信息,跳过数据库,可以持久保存,支持认证用户和匿名用户,在你下次登入后,数据仍然可见。
注意点:
使用HttpContext.Current.Profile属性可以在外部组中访问Profile,就是指在其他类访Profile.
例:HttpContext.Current.Profile.GetPropertyValue("A"));A即为Profile的变量名。(下面代码有用到)
当建立Web应用程序时,要花费了大量的精力用于做一些事情,其中的一个就是写一些用于从数据库存储和获得用户信息的代码。
“Profile对象引入帮助我们从乏味的编码工作中解脱出来”.不过说实话,在这个例子里,我没发现它的优越的地方,一样要写数据库连接的代码,只不过不用新建表,有待进一步研究.
在webconfig里的system.web节点声明Profile的属性,见第5行。
Favorites是Profile的属性名称,FavoritesComics是类名,serializeAs是指定串行化方式Binary。
2 <system.web>
3 <profile>
4 <properties>
5 <add name=" Favorites " type="FavoritesComics" serializeAs="Binary" />
6 </properties>
7 </profile>
8 </system.web>
9 </configuration>
10
接下来,新建一个FavoriteComics类:
public class FavoriteComics
{
public ArrayList IDs=new ArrayList(); //定义一个数组,存储我将收藏的商品ID
public void AddComic(int id)… //加进收藏架
public void RemoveComic(int id)… //从收藏架移除
public bool IsInFavoritesList(int id)… //判断是否在收藏的数组中
public SqlDataReader GetFavorites()… //连接数据库的
}
详细代码如下:
public class FavoriteComics
{
public ArrayList IDs=new ArrayList();
public FavoriteComics()
{
}
public void AddComic(int id)
{
IDs.Add(id);
}
public void RemoveComic(int id)
{
for (int i = 0; i < IDs.Count; i++)
{
int temp = (int)IDs[i];
if (temp == id)
{
IDs.RemoveAt(i) ;
break;
}
}
}
public bool IsInFavoritesList(int id)
{
return IDs.Contains(id);
}
public SqlDataReader GetFavorites()
{
string connString = WebConfigurationManager.ConnectionStrings["MyComicsConnectionString"].ConnectionString;
//获得连接数据库的字符串
SqlConnection conn = new SqlConnection();
conn.ConnectionString = connString;
string where = " 1=2 ";
foreach (object o in IDs)
{
where = where + " or ComicID=" + (int)o+" ";
}
string sql = "SELECT [ComicID], [Title], [Year] , [Number], [Grade], [BookValue]FROM [Books] where " + where;
conn.Open();
SqlCommand cmd = new SqlCommand(sql, conn);
return cmd.ExecuteReader();
}
}
Profile的使用:
这里,针对一个LINKBUTTON(Add this comic to my Favorite list):
2 {
3
4 int id = Convert.ToInt32(DetailsView1.Rows[1].Cells[1].Text); //由于相关模块没有列出来,这里的作用就是获得ComicID
5
6
7 if (LinkButton1.CommandName == "Add") // 见Page_LoadComplete()事件
8 {
9 //使用profile
10 if (Profile.Favorites == null)
11 Profile.Favorites = new FavoriteComics();
12 Profile.Favorites.AddComic(id);
13 }
14 else
15 Profile.Favorites.RemoveComic(id);
16 }
17
18 void Page_LoadComplete(object sender, EventArgs e)
19 {
20 //获得ComicID
21 int id = Convert.ToInt32(DetailsView1.Rows[1].Cells[1].Text);
22
23
24 if (Profile.Favorites == null || !Profile.Favorites.IsInFavoritesList(id))
25 {
26 LinkButton1.Text = "Add this comic to my Favorites list";
27 LinkButton1.CommandName = "Add";
28 }
29 else
30 {
31 LinkButton1.Text = "Remove this comic from my Favorites list";
32 LinkButton1.CommandName = "Remove";
33 }
34 }
35
最后定义了一个FavoritesDB class,为的是与ObjectSource绑定,让GridView显示收藏的结果。
2 {
3 public FavoritesDB()
4 {
5
6
7
8 }
9 public SqlDataReader GetFavorites()
10 {
11 return ((FavoriteComics)HttpContext.Current.Profile.GetPropertyValue("Favorites")).GetFavorites();
12
13
14 }
15
16 public void RemoveComic(int ComicID)
17 {
18 ((FavoriteComics)HttpContext.Current.Profile.GetPropertyValue("Favorites")).RemoveComic(ComicID);
19 }
20 }
21
Gridview显示结果:
以上是整个完整的过程,核心在于Profile的定义,Favorites类的定义.关于网站其他的部分,有空再写写吧。