注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

神魔破杜梓的叨叨堂

Programming every day!

 
 
 

日志

 
 
 
 

ASP.NET 2.0个性化配置(profile) (二)

2006-10-24 22:42:06|  分类: My Tech |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

列表 6. Products.aspx (C#)

<%
@ Page Language="C#" %>
<%@ Import Namespace="System.Globalization" %>
<script runat="server">

    
void Page_Load() {
        
if (!IsPostBack)
            BindShoppingCart();
    }
        
    
void BindShoppingCart() 
    {
        
if (Profile.ShoppingCart != null
        {
            CartGrid.DataSource 
= Profile.ShoppingCart.CartItems;
            CartGrid.DataBind();
            lblTotal.Text 
= Profile.ShoppingCart.Total.ToString("c");
        }
    }
   
    
void AddCartItem(Object s, EventArgs e) 
    {
        GridViewRow row 
= ProductGrid.SelectedRow;

        
int ID = (int)ProductGrid.SelectedDataKey.Value;
        String Name 
= row.Cells[1].Text;
        
decimal Price = Decimal.Parse(row.Cells[2].Text, 
          NumberStyles.Currency);
        
        
if (Profile.ShoppingCart == null)
            Profile.ShoppingCart 
= new ShoppingCart();
       
        Profile.ShoppingCart.AddItem(ID, Name, Price);
        BindShoppingCart();
    }
    
    
void RemoveCartItem(Object s, EventArgs e) 
    {
        
int ID = (int)CartGrid.SelectedDataKey.Value;
        Profile.ShoppingCart.RemoveItem(ID);
        BindShoppingCart();
    }
</script>

<html>
<head>
    
<title>Products</title>
</head>
<body>
    
<form id="form1" runat="server">

    
<table width="100%">
    
<tr>
        
<td valign="top">
    
<h2>Products</h2>    
    
<asp:GridView
        ID
="ProductGrid"
        DataSourceID
="ProductSource"
        DataKeyNames
="ProductID"
        AutoGenerateColumns
="false"
        OnSelectedIndexChanged
="AddCartItem"
        ShowHeader
="false"
        CellPadding
="5"
        Runat
="Server">
        
<Columns>
            
<asp:ButtonField 
                CommandName
="select"
                Text
="Buy" />
            
<asp:BoundField
                DataField
="ProductName" />
            
<asp:BoundField
                DataField
="UnitPrice" 
                DataFormatString
="{0:c}" />
        
</Columns>
    
</asp:GridView>



        
    
<asp:SqlDataSource
        ID
="ProductSource"
        ConnectionString
=
"Server=localhost;Database=Northwind;Trusted_Connection=true;"
        SelectCommand
=
          
"SELECT ProductID,ProductName,UnitPrice FROM Products"
        Runat
="Server" />
        
</td>
        
<td valign="top">
        
<h2>Shopping Cart</h2>
        
<asp:GridView
            ID
="CartGrid"
            AutoGenerateColumns
="false"
            DataKeyNames
="ID"
            OnSelectedIndexChanged
="RemoveCartItem"
            CellPadding
="5" 
            Width
="300"
            Runat
="Server">
            
<Columns>
            
<asp:ButtonField
                CommandName
="select"
                Text
="Remove" />
            
<asp:BoundField
                DataField
="Name" 
                HeaderText
="Name" />
            
<asp:BoundField
                DataField
="Price" 
                HeaderText
="Price" 
                DataFormatString
="{0:c}" />
            
<asp:BoundField
                DataField
="Quantity" 
                HeaderText
="Quantity" />
            
</Columns>
        
</asp:GridView>
        
<b>Total:</b> 
        
<asp:Label ID="lblTotal" Runat="Server" />
        
</td>
     
</tr>
     
</table>
    
</form>
</body>
</html>

继承一个profile
你也可以通过从一个已经存在的profile类中继承一个profile来完成对profile的定义,这种特性能够帮助你在多个应用程序中使用相同的profile。
例如,列表7中列出了一个拥有多个用户属性的类,该类是从ProfileBase类继承而来的(你可以在System.Web.Profile中找到)

在列表8中的Web.config包含一个从UserInfo类继承而来的profile,通过该声明,新的profile可以获得UserInfo类的所有属性。


列表 7. UserInfo (C#)

using System.Web.Profile;

public class UserInfo : ProfileBase
{
private string _FirstName;
private string _LastName;

public string FirstName
{
get { return _FirstName; }
set { _FirstName = value; }
}
public string LastName
{
get { return _LastName; }
set { _LastName = value; }
}
}

using
 System;
using System.Web.Profile;

public class UserInfo : ProfileBase
{
    
private string _FirstName;
    
private string _LastName;

    
public string FirstName 
    {
        
get { return _FirstName; }
        
set { _FirstName = value; }
    }
    
public string LastName
    {
        
get { return _LastName; }
        
set { _LastName = value; }
    }
}

列表 8. Web.Config

<
configuration>
    
<system.web>
           
<anonymousIdentification enabled="true" />
   
<profile inherits="UserInfo" />
    
</system.web>
</configuration>


列表 9 Web.config

<
configuration>
<system.web>

   
<authentication mode="Forms" />
      
           
<anonymousIdentification enabled="true" />
        
   
<profile>
   
<properties>
                  
<add 
         
name="FavoriteColor"
         allowAnonymous
="true" 
         defaultValue
="Red" />
               
</properties>
           
</profile>
</system.web>
</configuration>

列表10中有一个包含两个按钮的页面,分别是login和logout按钮,其中还有一个用于更新FavoriteColor属性的表单。

列表10. Anonymous.aspx (C#)

<%
@ Page Language="C#" %>

<script runat="server">

    
void Login(Object s, EventArgs e)
    {
        FormsAuthentication.SetAuthCookie(
"Bill"false);
        Response.Redirect(Request.Path);
    }

    
void Logout(Object s, EventArgs e)
    {
        FormsAuthentication.SignOut();
        Response.Redirect(Request.Path);
    }

    
void UpdateProfile(Object s, EventArgs e)
    {
        Profile.FavoriteColor 
= txtFavoriteColor.Text;
    }
    
    
void Page_PreRender()
    {
        lblUsername.Text 
= Profile.UserName;
        lblFavoriteColor.Text 
= Profile.FavoriteColor;
    }
        
</script>

<html>
<head>
    
<title>Anonymous</title>
</head>
<body>
    
<form id="form1" runat="server">

    
<asp:Button
        Text
="Login"
        OnClick
="Login"
        Runat
="Server" />
    
<asp:Button ID="Button1"
        Text
="Logout"
        OnClick
="Logout"
        Runat
="Server" />
    
<hr />
    
<asp:TextBox    
        id
="txtFavoriteColor"
        Runat
="Server" />
    
<asp:Button
        Text
="Update Profile"
        OnClick
="UpdateProfile"
        Runat
="Server" />
    
<hr />
    
<b>Username:</b>
    
<asp:Label  
        id
="lblUsername"
        Runat
="Server" />
    
<br />
    
<b>Favorite Color:</b>
    
<asp:Label
        id
="lblFavoriteColor"
        Runat
="Server" />    
        
    
</form>
</body>
</html>

当你打开第一个页面时,UserName的值是一个随机生成的唯一识别号(见图3)。当你按下Login按钮后,你就完成了身份认证,它是通过用户票据(User Bill)完成的。

ASP.NET 2.0个性化配置(profile) (二) - hydra1983 - Edisons Closet
图3 使用匿名和认证profile

列表10的页面中包含一个用于更新FavoriteColor的表单,要注意的是,在你登录登出的时候,会分别生成两个不同的profile。例如当你先登录,后登出的话,那么系统会生成一个随机的唯一识别号。

在很多情况下,你需要把匿名profile迁移到认证profile状态,如果你需要迁移profile属性值的话,你可以利用 ProfileModule类的MigrateAnonymous事件完成该任务,该事件只能在Global.asax文件中进行处理。列表11中的 Global.asax演示了你如何才能实现FavoriteColor属性的迁移。


列表 11. Global.asax (C#)

<%@ Application Language="C#" %>
<script runat="server">

    
void Profile_MigrateAnonymous(Object s, 
      ProfileMigrateEventArgs e)
    {
        ProfileCommon anonProfile 
= 
          Profile.GetProfile(e.AnonymousId);
        Profile.FavoriteColor 
= anonProfile.FavoriteColor;
    }   
</script>

通过Profile类的GetProfile()方法你可以获得匿名profile,该方法接收一个唯一识别号,并且返回与唯一识别号对应的profile。ProfileMigrateEventArgs对象包含一个匿名识别号。

  评论这张
 
阅读(399)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017