zoukankan      html  css  js  c++  java
  • 20150225--ASP.NET基础(2)

    一、引用外部样式表或JS,在<head>…</head>标签之间添加:

    <link href="yangshi.css" type="text/css" rel="stylesheet" />
    <script src="jquery-2.1.1.js"></script>

    注意文件路径,  ../ 表示从本级目录向上一级,  文件名/  表示向下一级 

    二、如何在ASP.NET的网页中实现用户登录:

    1.使用ASP.net的控件:

    按照下图绘制(注意图中的按钮使用的是ASP.NET的控件):

    image

    image

    按钮的点击事件代码,需要写在.cs文件中,

    protected void btnSubmit_Click(object sender, EventArgs e)
        {
            string user = txtUser.Text.Trim();//获取输入的用户名
            if (user == "")
            {
                Response.Write("<font size=36 color=#e3e3e3>不能为空</font>");
            }
            string pwd = txtPwd.Text.Trim();//获取输入的密码
            if (txtYzm.Text.Trim() == yzm.Text)
            {
                UserTableData udata = new UserTableDA().Select(user, pwd);//比对,这个方法并非Code Smith自动创建,
                if (udata != null)
                {
                    Response.Redirect("http://baidu.com");//比对正确,打开百度网页
                }
                else
                {
                    Label1.Visible = true;
                }
            }
            else
            {
                Response.Write("<font size=36 color=#ccaa55>验证码错误</font>");
            }
        }

    Response.Write()  在HTML的源中写入()中的内容,遵循HTML的语言格式。

    此段代码中使用的是Code Smith自动生成增删改查,与面向对象中的自己创建的增删改查是一样的。

    Select(user,pwd)的内容:(根据Code Smith生成的代码改写)

    public UserTableData Select(string user,string pwd)
            {
                UserTableData data = null;
                _Cmd.CommandText = "select * from UserTable where uname = @uname and upwd=@upwd";
                _Cmd.Parameters.Clear();
                _Cmd.Parameters.AddWithValue("@uname", user);
                _Cmd.Parameters.AddWithValue("@upwd", pwd);
                try
                {
                    _Conn.Open();
                    SqlDataReader dr = _Cmd.ExecuteReader();
                    while (dr.Read())
                    {
                        data = new UserTableData();
                        data.Ucode = (Int32)dr["ucode"];
                        data.Uname = (String)dr["uname"];
                        data.Upwd = (String)dr["upwd"];
                        data.Uvip = (String)dr["uvip"];
                        data.Uremark = (String)dr["uremark"];
                    }
                    dr.Close();
                    dr.Dispose();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {
                    _Conn.Close();
                    _Cmd.Dispose();
                    _Conn.Dispose();
                }
                return data;
            }

    使用HTML的控件,

    image

    注意其单击事件,有两种单击事件,一种是onclick,一种是onserverclick(在服务器上单击)

    onclick事件是写在本页面中HTML的方法function():

    <script>
            function yanzheng()
            {
                var x = document.getElementById("txtUser");
                if (x.value.length == 0)
                {
                    alert("用户名不能为空");
                }
            }
        </script>

    alert()  弹出对话框。

    onserverclick事件写在此网页的.cs文件中

    protected void btnSubmit_ServerClick(object sender, EventArgs e)
        {
            string user = txtUser.Value;
            string pwd = txtUser2.Value;
            UserTableData udata = new UserTableDA().Select(user, pwd);
            if (udata != null)
            {
                Response.Redirect("http://baidu.com");
            }
            else
            {
                Label1.Text = "用户不存在";
            }
        }

    添加图片类型的验证码:

    在网站项目中新加一个类:一般处理程序(.ashx文件),

    image

    然后写入以下代码(替代原有的代码):

    <%@ WebHandler Language="C#" Class="Handler" %>
    
    using System;
    using System.Web;
    using System.Web.SessionState;
    using System.Drawing;
    using System.Drawing.Drawing2D;
    using System.Drawing.Imaging;
    public class Handler : IHttpHandler,IRequiresSessionState{
    
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "image/jpeg";
            Bitmap img = new Bitmap(50, 20);//位图
            Graphics g = Graphics.FromImage(img);
    
            string s = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
            string str = "";
            Random rand = new Random();//初始化随机数
            for (int i = 0; i < 4; i++)
            {
                int start = rand.Next(62); //生成一个随机的起始位置
                str += s.Substring(start, 1).ToString();
            }
            context.Session["code"] = str;
    
            Font font = new Font("宋体", 12, FontStyle.Bold);
            SolidBrush brush = new SolidBrush(Color.White);
            g.FillRectangle(brush, 0, 0, 50, 20);
            brush.Color = Color.Red;
            g.DrawString(str, font, brush, 0, 0);
            img.Save(context.Response.OutputStream, ImageFormat.Jpeg);
        }
         
     
        public bool IsReusable {
            get {
                return false;
            }
        }
    
    }

    在网页中添加一个Image的控件:

    image

    ImageUrl就是刚刚创建的一般处理程序的文件名。

    注意,点击验证码只刷新验证码,用到了一个异步操作,在AJAX扩展中的两个控件:

    ScriptManager与UpdatePanel

    image

    注意,ScriptManager控件必须在UpdatePanel之前,一般将其放在网页的最开始:

    image

    HTML源:

    <body>
        <form id="form1" runat="server">
        <div>
            <asp:ScriptManager ID="ScriptManager1" runat="server">
            </asp:ScriptManager>
        
            <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                <ContentTemplate>
            验证码:<asp:TextBox ID="txtCode" runat="server" Width="74px"></asp:TextBox>
            <asp:Image ID="Image1" ToolTip="看不清点击换一张" runat="server" ImageUrl="Code.ashx" />
            <br />
            <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="登录" />
            <asp:Label ID="Label1" runat="server" ForeColor="Red"></asp:Label>
                </ContentTemplate>
            </asp:UpdatePanel>
        </div>
        </form>
    </body>

    UpdatePanel标签把需要单独提交的内容包裹起来即可。

    image  image

  • 相关阅读:
    网易考拉海购:电商高并发架构设计的铁律
    时序数据库(TSDB)-为万物互联插上一双翅膀
    从互联网+角度看云计算的现状与未来
    四两拨千斤式的攻击!如何应对Memcache服务器漏洞所带来的DDoS攻击?
    知物由学 | AI时代,那些黑客正在如何打磨他们的“利器”?(一)
    知物由学 | AI时代,那些黑客正在如何打磨他们的“利器”?(二)
    应对羊毛党的老手段不管用了,但有些公司依然有办法,他们是怎么做的?
    微服务化的数据库设计与读写分离
    Kubernetes性能测试实践
    微服务化之无状态化与容器化
  • 原文地址:https://www.cnblogs.com/Tirisfal/p/4299437.html
Copyright © 2011-2022 走看看