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

posted @ 2015-02-25 13:11  Tirisfal  阅读(157)  评论(0编辑  收藏  举报