zoukankan      html  css  js  c++  java
  • 【mvc学习】给小白们的第一个MVC学习Demo之Login篇

    上次的Demo,只做了一个查询列表的功能,而且用的是ajax,今天我们来看下原味的mvc的过程,以登录为例,我们依旧是用sqlite数据库

    按上次的步骤,我们已经有了一个可以跑的项目,接下来就是添加Login的Action和View以及Modals

    STEP 1 : 我们需要数据库支持,添加用户表users,字段如下

    添加用户数据:insert into users(account,password,name) values('123','123','白茶程序员')

    STEP 2 :添加Modals

    namespace MvcDemo.Models
    {
        public class User
        {
            public int ID { get; set; }
    
            public string Name { get; set; }
    
            public string Account { get; set; }
    
            public string Password { get; set; }
        }
    }
    

    STEP 3 : 添加登录显示界面Action到HomeController

     public ActionResult Login()
            {          
                
                return View();
            }
    

    STEP 4 :添加视图,快速的方法是在Action的名字(也就是Login)上右键

    在登录界面上完成基本的表单,表单每项的名字对应Modal的名字,指定Action为GoLogin

    @{
        ViewBag.Title = "Login";
    }
    
    <h2>Login</h2>
    
    <div>
        <form action="GoLogin">
            <div>
                
                @Html.TextBox("Account", "", new { placeholder = "请输入用户名" }) 
            </div>
            <div>
                
                @Html.TextBox("Password", "", new { placeholder = "请输入密码" }) 
            </div>
            <input type="submit" />
        </form>
    </div>
    

    STEP 5 . 在HomeController中添加GoLogin的Action

      /// <summary>
            /// 执行登录操作
            /// </summary>
            /// <param name="user"></param>
            /// <returns></returns>
            public ActionResult GoLogin(User user)
            {
                User findUser = null;
                //用参数的方式,可以避免非法字符,以及sql注入的问题,sqlserver 请用@符号
                string sql = "select * from users where account =:account ";
                //使用using方式,如果发生异常,将会执行Displose方法,conn的Dispose方法会关闭连接
                using (SQLiteConnection conn = new SQLiteConnection(System.Configuration.ConfigurationManager.ConnectionStrings["sqliteConnection"].ConnectionString))
                {
                     conn.Open();
                    //执行查询
                    SQLiteCommand cmd = new SQLiteCommand(sql, conn);
                    cmd.Parameters.Add(new SQLiteParameter(":account", user.Account));               
                    SQLiteDataReader dr = cmd.ExecuteReader();
                    //将查询的数据填充到User实体
                    if (dr.Read())
                    {
                        findUser = new User() { Name=dr["name"].ToString(), Account = dr["account"].ToString(), Password = dr["password"].ToString() };
                    }
                    conn.Close();
                }
                string Msg = null;
                if (findUser == null) Msg = "账号不存在!";
                else if (findUser.Password != user.Password) Msg = "密码错误!";           
    
    
                if(Msg ==null)
                {
                    Msg = "登录成功,欢迎回来 , " + findUser.Name;
                    return RedirectToAction("Index", new { message = Msg });
                }
                else
                {
                    return RedirectToAction("Login", new { user = user, message = Msg });
                }
                
            }
    

    RedirectToAction("Index", new { message = Msg })是登录成功后跳转,并且传递参数 , 失败的话,还是跳转到Login并且传递失败原因和Modal(输入的内容)


    登录界面如下:

    验证成功后,不成功,会显示失败原因

    源代码我放到了github上面: https://github.com/colys/TeaLearning  , 可以用git下,或者直接download zip  . 强烈推荐git,不会的去学一下,是源代码管理的工具

  • 相关阅读:
    Js面向对象
    JavaScript:this是什么?
    vs2010 连接 oracle 11g
    Oracle 数据库 数据文件 表 表空间 用户的关系
    消息推送
    Zookeeper's Bug
    hadoop启动之后没有namenode和secondarynamenode
    大数据zookeeper connect time out
    Silverlight中需要用到模板选择器(DataTemplateSelector)的替代方案
    当SQL Server数据库遇到Oracle数据交互接口
  • 原文地址:https://www.cnblogs.com/colys/p/4598739.html
Copyright © 2011-2022 走看看