asp.net mvc学习笔记之设置一个自定义控件--登录控件(本博文对51自学网代码有所参考与引用)
1、UserLogin.ascx.cs
using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Web; using System.Web.Mvc; using System.Web.UI; using System.Web.UI.WebControls; using WebSite; namespace mvc_site1.App_ctl { public partial class UserLogin : System.Web.UI.UserControl { protected void Page_Load(object sender, EventArgs e) { } protected void btn_login_Click(object sender, EventArgs e) { superUserInfo su = (superUserInfo)Session["userInfo"]; su.UserID = txt_id.Text; su.UserPWD = txt_pwd.Text; su.AutoLogin = chk_autoLog.Checked; if (su.tryLogin()) { su.setCookies(); } } ///////////////////////////// protected void Page_PreRender(object sender, EventArgs e) { superUserInfo su = (superUserInfo)Session["userInfo"]; if (su.GetIsLogin()) { mv_login.SetActiveView(v_success); } else { mv_login.SetActiveView(v_login); } } protected void Button1_Click(object sender, EventArgs e) { ((superUserInfo)Session["userInfo"]).LogOut(); } } }
2、UserLogin.ascx
1 <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="UserLogin.ascx.cs" Inherits="mvc_site1.App_ctl.UserLogin" %> 2 <link href="../App_style/Css1.css" rel="stylesheet" /> 3 4 5 <asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server"></asp:ScriptManagerProxy> 6 <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 7 <ContentTemplate> 8 <asp:MultiView ID="mv_login" runat="server"> 9 <asp:View ID="v_login" runat="server"> 10 <p>登录界面</p> 11 <asp:TextBox ID="txt_id" runat="server"></asp:TextBox><br/> 12 <asp:TextBox ID="txt_pwd" runat="server" TextMode="Password"></asp:TextBox> 13 <asp:CheckBox ID="chk_autoLog" runat="server" Text="自动登录" /> 14 <asp:Button ID="btn_login" runat="server" Text="登陆" OnClick="btn_login_Click" /><br/> 15 </asp:View> 16 17 18 <asp:View ID="v_success" runat="server"> 19 <p>已登录</p> 20 <asp:Button ID="Button2" runat="server" Text="退出登陆" OnClick="Button1_Click" /> 21 </asp:View> 22 </asp:MultiView> 23 </ContentTemplate> 24 </asp:UpdatePanel> 25
3、类库文件myclass1.cs
1 using System; 2 using System.Collections.Generic; 3 using System.Data; 4 using System.Data.SqlClient; 5 using System.Linq; 6 using System.Web; 7 using System.Web.UI.WebControls; 8 9 namespace WebSite 10 { 11 public class superConn 12 { 13 public SqlConnection cnn; 14 private SqlCommand cmd; 15 private SqlDataReader datar; 16 public superConn(string filename) 17 { 18 string _path = "server=.;database="+filename+";uid=sa;pwd=sasa123"; 19 cnn = new SqlConnection(_path); 20 } 21 public void Open() 22 { 23 cnn.Open(); 24 } 25 public void Close() 26 { 27 cnn.Close(); 28 } 29 public SqlDataReader Command(string _sql, string str1, string str2, string str3, string str4) 30 { 31 cmd = new SqlCommand(_sql, cnn); 32 cmd.Parameters.AddWithValue(str1, str3); 33 cmd.Parameters.AddWithValue(str2, str4); 34 SqlDataAdapter da = new SqlDataAdapter(cmd); 35 DataTable dt = new DataTable(); 36 da.Fill(dt); 37 SqlDataReader reader = cmd.ExecuteReader(); 38 return reader; 39 } 40 public SqlDataReader GetDataReader(string _sql) 41 { 42 cmd = new SqlCommand(_sql,cnn); 43 datar = cmd.ExecuteReader(); 44 return datar; 45 } 46 //返回DDL控件报名列表 47 public DropDownList GetDDlforTableList() 48 { 49 DropDownList _ddl = new DropDownList(); 50 cnn.Open(); 51 DataTable dt = cnn.GetSchema("Tables", null); 52 foreach(DataRow dr in dt.Select("TABLE_TYPE='TABLE'")) 53 { 54 string s = dr["TABLE_NAME"].ToString(); 55 _ddl.Items.Add(new ListItem(s)); 56 57 } 58 cnn.Close(); 59 return _ddl; 60 } 61 //返回table,详细表内容 62 public Table GetTable(string _tableName) 63 { 64 Table _tbl = new Table(); 65 cnn.Open(); 66 cmd = new SqlCommand("SELECT * FROM"+_tableName,cnn); 67 datar = cmd.ExecuteReader(); 68 69 int i_fcount = datar.FieldCount; 70 TableHeaderRow thr = new TableHeaderRow(); 71 for (int i = 0; i < i_fcount; i++) 72 { 73 TableHeaderCell thd= new TableHeaderCell(); 74 thd.Text = datar.GetName(i); 75 thr.Cells.Add(thd); 76 } 77 _tbl.Rows.Add(thr); 78 79 80 while (datar.Read()) 81 { 82 TableRow tr = new TableRow(); 83 for (int i = 0; i < i_fcount; i++) 84 { 85 TableCell td = new TableCell(); 86 td.Text = datar[i].ToString(); 87 tr.Cells.Add(td); 88 } 89 _tbl.Rows.Add(tr); 90 91 } 92 cnn.Close(); 93 return _tbl; 94 } 95 96 } 97 98 public class superUserInfo 99 { 100 public string UserID; 101 public string UserPWD; 102 public Boolean AutoLogin; 103 private Boolean isLogin; 104 public superUserInfo() 105 { 106 UserID = ""; 107 UserPWD = ""; 108 isLogin = false; 109 try 110 { 111 ReadCookies(); 112 if (AutoLogin) 113 { tryLogin(); } 114 } 115 catch { } 116 } 117 public Boolean GetIsLogin() 118 { 119 return isLogin; 120 } 121 122 //设置cookie 123 public void setCookies() 124 { 125 HttpCookie ck = new HttpCookie("ckLogin"); 126 ck.Values.Add("cID", HttpUtility.UrlEncode(UserID)); 127 ck.Values.Add("cPWD", HttpUtility.UrlEncode(UserPWD)); 128 ck.Values.Add("cAutoLogin", HttpUtility.UrlEncode(AutoLogin.ToString())); 129 //ck.Values.Add("cID",UserID); 130 //ck.Values.Add("cPWD",UserPWD); 131 //ck.Values.Add("cAutoLogin", AutoLogin.ToString()); 132 ck.Expires = DateTime.MaxValue; 133 HttpContext.Current.Response.Cookies.Add(ck); 134 } 135 //读取cookie 136 public void ReadCookies() 137 { 138 HttpCookie ck = HttpContext.Current.Request.Cookies["ckLogin"]; 139 UserID = HttpUtility.UrlDecode(ck["cID"]); 140 UserPWD = HttpUtility.UrlDecode(ck["cPWD"]); 141 AutoLogin = Boolean.Parse(HttpUtility.UrlDecode(ck["cAutoLogin"])); 142 //UserID = ck.Values["cID"]; 143 //UserPWD = ck.Values["cPWD"]; 144 //AutoLogin = Boolean.Parse(ck.Values["cAutoLogin"]); 145 146 } 147 //尝试登陆方法 148 public Boolean tryLogin() 149 { 150 isLogin = false; 151 superConn conn = new superConn("User_LogIn"); 152 conn.Open(); 153 string _sql = "select * from [dbo].[User] where UserName='" + UserID + "'"; 154 SqlDataReader dr = conn.GetDataReader(_sql); 155 if (dr.Read()) 156 { 157 if (dr["Password"].ToString() == UserPWD) 158 { 159 isLogin = true; 160 } 161 } 162 conn.Close(); 163 return isLogin; 164 } 165 //退出登陆方法 166 public void LogOut() 167 { 168 isLogin = false; 169 } 170 } 171 172 173 }
4、添加一个默认首页default.aspx,引用自定义母版页后,添加该登录控件
1 <%@ Page Title="" Language="C#" MasterPageFile="~/mst_lv0.Master" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="mvc_site1.Default" %> 2 <%@ Register Src="~/App_ctl/UserLogin.ascx" TagName="userLogin" TagPrefix="myCtrls" %> 3 <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> 4 </asp:Content> 5 <asp:Content ID="Content2" ContentPlaceHolderID="cph_bigimg" runat="server"> 6 </asp:Content> 7 <asp:Content ID="Content3" ContentPlaceHolderID="cph_contant_temp" runat="server"> 8 <myCtrls:userLogin id="UserLogin1" runat="server"/> 9 </asp:Content>
5、设置Global.asax文件
1 <%@ Application Codebehind="Global.asax.cs" Inherits="mvc_site1.MvcApplication" Language="C#" %> 2 3 <%@Import Namespace="System.IO"%> 4 5 <%@Import Namespace="WebSite"%> 6 7 <script RunAt="server"> 8 protected void Application_Start(object sender, EventArgs e) 9 { 10 11 } 12 13 protected void Session_Start(object sender, EventArgs e) 14 { 15 //新会话启动时运行的代码 16 // Session["SampleLogin"] = new SampleLogin(); 17 Session["UserInfo"] = new superUserInfo(); 18 } 19 20 protected void Application_BeginRequest(object sender, EventArgs e) 21 { 22 23 } 24 25 protected void Application_AuthenticateRequest(object sender, EventArgs e) 26 { 27 28 } 29 30 protected void Application_Error(object sender, EventArgs e) 31 { 32 33 } 34 35 protected void Session_End(object sender, EventArgs e) 36 { 37 //在会话结束时运行的代码。 38 // 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为 39 // InProc 时,才会引发 Session_End 事件。如果会话模式 40 //设置为 StateServer 或 SQLServer,则不会引发该事件。 41 } 42 43 protected void Application_End(object sender, EventArgs e) 44 { 45 46 } 47 </script>