算是摸了点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显示结果:
![](https://i-blog.csdnimg.cn/blog_migrate/c4360affb23085520a42eec7ea554bc8.gif)
以上是整个完整的过程,核心在于Profile的定义,Favorites类的定义.关于网站其他的部分,有空再写写吧。