ASP.Net/Development/Profile

Материал из .Net Framework эксперт
Перейти к: навигация, поиск

Demonstrates how to use the ASP.NET user profile

   <source lang="csharp">

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"

   Inherits="Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">

   <title>Make Your Page The Way You Want</title>

</head> <body>

       <form id="form1" runat="server">
          <asp:loginname ID="CurrentUser" runat="server" FormatString="Welcome, {0}" /></td>
          <asp:loginstatus ID="Loginstatus1" 
                           runat="server" 
                           LogoutText="Log off" 
                           LogoutAction="Refresh"/>
          <asp:Panel runat="server" 
                     ID="InfoPanel" 
                     BackColor="AliceBlue" 
                     BorderStyle="Outset" 
                     BorderWidth="1px">
          <asp:PlaceHolder runat="server" ID="Favorites" />
          <asp:MultiView runat="server" ID="Options" ActiveViewIndex="0">
             <asp:View runat="server" ID="MenuOptions">
                <asp:LinkButton runat="server" ID="EditButton" text="Click here to edit" OnClick="OnEditOptions" /> 
             </asp:View>
             <asp:View runat="server" ID="ChangeOptions">
                <asp:textbox runat="server" id="NewBackColor" tooltip="Enter background color" />
                <asp:button runat="server" id="button1" text="Set Back Color" onclick="OnSetBackColor" />
                <asp:textbox runat="server" id="NewForeColor" tooltip="Enter foreground color" />
                <asp:button runat="server" id="button3" text="Set Fore Color" onclick="OnSetForeColor" />
                <asp:textbox runat="server" id="NewFontName" tooltip="Enter the font family name" />
                <asp:textbox runat="server" id="NewFontSize" tooltip="Enter the font size in points" />
                <asp:button runat="server" id="button4" text="Set Font" onclick="OnSetFont" />
                <asp:textbox runat="server" id="NewLink" tooltip="Enter a new URL" />
                <asp:button runat="server" id="button2" text="Add Link" onclick="OnAddLink" />
                <asp:button runat="server" id="button5" text="Remove Link" onclick="OnRemoveLink" />
                <asp:LinkButton ID="LinkButton1" runat="server" text="Close" OnClick="OnCloseOptions" /> 
             </asp:View>
           </asp:MultiView>
           </asp:Panel>   
       </form>

</body> </html> File: Default.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections.Specialized; using System.Web; using System.Drawing; using System.Web.UI; using System.Web.UI.WebControls; public partial class Default : System.Web.UI.Page {

   protected void Page_Load(object sender, EventArgs e)
   {
       if (!IsPostBack)
       {
           InitProfile();
           InitOptionsDialog();
       }
       ApplyPagePersonalization();
   }
   private void InitProfile()
   {
       if (String.IsNullOrEmpty(Profile.BackColor))
           Profile.BackColor = InfoPanel.BackColor.Name;
       if (String.IsNullOrEmpty(Profile.ForeColor))
           Profile.ForeColor = InfoPanel.ForeColor.Name;
       if (String.IsNullOrEmpty(Profile.Font.Name))
           Profile.Font.Name = InfoPanel.Font.Name;
       if (Profile.Font.SizeInPoints == 0)
           Profile.Font.SizeInPoints = (int) InfoPanel.Font.Size.Unit.Value;
   }
   private void InitOptionsDialog()
   {
       NewBackColor.Text = Profile.BackColor;
       NewForeColor.Text = Profile.ForeColor;
       NewFontName.Text = Profile.Font.Name;
       NewFontSize.Text = Profile.Font.SizeInPoints.ToString();
   }
   private void ApplyPagePersonalization()
   {
       InfoPanel.ForeColor = ColorTranslator.FromHtml(Profile.ForeColor);
       InfoPanel.BackColor = ColorTranslator.FromHtml(Profile.BackColor);
       InfoPanel.Font.Name = Profile.Font.Name;
       InfoPanel.Font.Size = FontUnit.Point(Profile.Font.SizeInPoints);
       Favorites.Controls.Clear();
       if(Profile.Links.Count == 0)
           Favorites.Controls.Add (new LiteralControl("No links available."));
       else
           foreach (object o in Profile.Links)
           {
               HyperLink h = new HyperLink ();
               h.Text = o.ToString ();
               h.NavigateUrl = o.ToString ();
               Favorites.Controls.Add(h);
               Favorites.Controls.Add(new LiteralControl("
")); } } protected void OnEditOptions(object sender, EventArgs e) { Options.ActiveViewIndex = 1; } protected void OnCloseOptions(object sender, EventArgs e) { Options.ActiveViewIndex = 0; } protected void OnSetBackColor(object sender, EventArgs e) { Profile.BackColor = NewBackColor.Text; ApplyPagePersonalization(); } protected void OnSetForeColor(object sender, EventArgs e) { Profile.ForeColor = NewForeColor.Text; ApplyPagePersonalization(); } protected void OnSetFont(object sender, EventArgs e) { Profile.Font.Name = NewFontName.Text; Profile.Font.SizeInPoints = Int32.Parse(NewFontSize.Text); ApplyPagePersonalization(); } protected void OnAddLink(object sender, EventArgs e) { Profile.Links.Add(NewLink.Text); ApplyPagePersonalization(); } protected void OnRemoveLink(object sender, EventArgs e) { Profile.Links.Remove(NewLink.Text); ApplyPagePersonalization(); }

} File: Web.config <?xml version="1.0"?> <configuration> ...

   <profile enabled="true">
     <properties>
       <add name="BackColor" type="string" allowAnonymous="true"/>
       <add name="ForeColor" type="string" allowAnonymous="true"/>
       <add name="Links" type="System.Collections.Specialized.StringCollection" allowAnonymous="true"/>
       <group name="Font">
         <add name="Name" type="string" allowAnonymous="true"/>
         <add name="SizeInPoints" type="int" defaultValue="12" allowAnonymous="true"/>
       </group>
     </properties>
   </profile>

... </configuration>

</source>
   
  


Dynamic expression

   <source lang="csharp">

<%@ Page Language="C#" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">

   <title>Untitled Page</title>

</head> <body>

   <form id="form1" runat="server">
   <asp:Label runat="server" id="Label1" Text="<%$ AppSettings:AppVersionNumber %>" />
   </form>

</body> </html> File: <?xml version="1.0"?> <configuration>

 <appSettings>
   <add key="AppVersionNumber" value="8.2.2001"/>
 </appSettings>

</configuration>

</source>
   
  


Profile Expression

   <source lang="csharp">

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="ProfileExpr" Debug="true"  %> <%@ Import Namespace="System.Configuration" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server">

   <title>Testing Dynamic Expressions</title>

</head> <body runat="server" bgcolor="<%$ Profile:BackColor %>">

   <form id="form1" runat="server">
   <asp:DropDownList id="List1" runat="server" DataSource="<%$ Profile:Links %>" />
  
   <asp:TextBox runat="server" ID="editorBackColor" />
   <asp:Button runat="server" ID="Button1" Text="Set BackColor" OnClick="Button1_Click" />
   <asp:TextBox runat="server" ID="editorForeColor" />
   <asp:Button runat="server" ID="Button2" Text="Set ForeColor" OnClick="Button2_Click" />
   
   <asp:TextBox runat="server" ID="editorLinks" />
   <asp:Button runat="server" ID="Button3" Text="Add Link" OnClick="Button3_Click" />
   <asp:Button runat="server" ID="Button4" Text="Remove Link" OnClick="Button4_Click" />
   <asp:Button runat="server" ID="Button5" Text="Refresh" backcolor="<%$ Profile:BackColor %>" />
   </form>

</body> </html> File: Default.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Drawing; using System.Web.UI; using System.Web.UI.WebControls; public partial class ProfileExpr : System.Web.UI.Page {

   protected void Page_Load(object sender, EventArgs e)
   {
       List1.DataBind();
   }
   protected void Button1_Click(object sender, EventArgs e)
   {
       Profile.BackColor = editorBackColor.Text;
   }
   protected void Button2_Click(object sender, EventArgs e)
   {
       Profile.ForeColor = editorForeColor.Text;
   }
   protected void Button3_Click(object sender, EventArgs e)
   {
       Profile.Links.Add(editorLinks.Text);
   }
   protected void Button4_Click(object sender, EventArgs e)
   {
       Profile.Links.Remove(editorLinks.Text);
   }

}

File: Web.Config <configuration>

   <profile enabled="true" defaultProvider="CookieProfileProvider">
     <properties>
       <add name="BackColor" type="string" allowAnonymous="true"/>
       <add name="ForeColor" type="string" allowAnonymous="true"/>
       <add name="Links" type="System.Collections.Specialized.StringCollection" allowAnonymous="true" serializeAs="Xml"/>
     </properties>
     <providers>
       <clear/>
       <add applicationName="/" name="CookieProfileProvider" type="ProAspNet20.Advanced.CS.ruponents.CookieProfileProvider, ProAspCompLib"/>
     </providers>
   </profile>

</configuration>

</source>
   
  


Profile information

   <source lang="csharp">

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="ProfileInfo_aspx" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head id="Head1" runat="server">

   <title>Profile Information</title>

</head> <body>

   <form id="form1" runat="server">
       <asp:Panel ID="pnlNonAnonymousInfo" runat="server">
           First Name: <asp:TextBox ID="firstName" Runat="server" />
           Last Name:  <asp:TextBox ID="lastName" Runat="server" />
           Phone number: <asp:TextBox ID="phone" Runat="server" />
           BirthDate <asp:TextBox ID="birthDate" Runat="server" />
       </asp:Panel>
       <asp:CheckBoxList ID="cblMyFlag" runat="server">
           <asp:ListItem>C#</asp:ListItem>
           <asp:ListItem>ASP.NET</asp:ListItem>
           <asp:ListItem>.NET Apps</asp:ListItem>
           <asp:ListItem>Java</asp:ListItem>
           <asp:ListItem>UML</asp:ListItem>
           <asp:ListItem>Object Oriented Design</asp:ListItem>
           <asp:ListItem>Design Patterns</asp:ListItem>
       </asp:CheckBoxList>
        <asp:Button ID="save" Text="Save" Runat="server" OnClick="save_Click" />
   </form>

</body> </html> File: Default.aspx.cs using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; public partial class ProfileInfo_aspx : System.Web.UI.Page {

   protected void Page_Load(object sender, EventArgs e)
   {
   if (!IsPostBack ) 
   {
     if (Profile.IsAnonymous == true)
     {
       this.pnlNonAnonymousInfo.Visible = false;
     }
     else
     {
       this.lastName.Text = Profile.lastName;
       this.firstName.Text = Profile.firstName;
       this.phone.Text = Profile.phoneNumber;
       this.birthDate.Text = Profile.birthDate.ToShortDateString();
     }        
     if (Profile.MyFlag != null)
     {
       foreach (ListItem li in this.cblMyFlag.Items)
       {
         foreach (string profileString in Profile.MyFlag)
         {
           if (li.Text == profileString)
           {
             li.Selected = true;
           }  
         }    
       }      
     }        
   }
   }            
 protected void save_Click(object sender, EventArgs e)
 {
   if (Profile.IsAnonymous == false)
   {
     Profile.lastName = this.lastName.Text;
     Profile.firstName = this.firstName.Text;
     Profile.phoneNumber = this.phone.Text;
     DateTime birthDate = Convert.ToDateTime(this.birthDate.Text);
     Profile.birthDate = birthDate;
   }
   Profile.MyFlag = new System.Collections.Specialized.StringCollection();
   foreach (ListItem li in this.cblMyFlag.Items)
   {
     if (li.Selected)
     {
       Profile.MyFlag.Add(li.Value.ToString());
     }
   }
   
   Response.Redirect("Welcome.aspx");
 }

} File: Web.Config <?xml version="1.0"?> <configuration>

 <connectionStrings>
   <remove name="LocalSqlServer"/>
   <add name="LocalSqlServer" connectionString="data source=.\SqlExpress;Integrated Security=SSPI;Initial Catalog=aspnetdb"/>
 </connectionStrings>
 <system.web>
   <anonymousIdentification enabled="true" />
   <authentication mode="Forms"/>
   <membership defaultProvider="AspNetSqlMembershipProvider"/>
   <roleManager enabled="True" defaultProvider="AspNetSqlRoleProvider"/>
   <compilation debug="true"/>
   <profile enabled="True" defaultProvider="AspNetSqlProfileProvider">
     <properties>
       <add name="lastName" />
       <add name="firstName" />
       <add name="phoneNumber" />
       <add name="birthDate" type="System.DateTime"/>
       <add name="MyFlag" allowAnonymous="true" 
        type="System.Collections.Specialized.StringCollection"  />
     </properties>
   </profile>
 </system.web>

</configuration>

</source>