zoukankan      html  css  js  c++  java
  • 笔试考试系统--MVC实现登录

    今天主要做了MVC的登录功能

    第一步,创建MVC项目

    根据自己的需求,可以选择Empty(空)的模板,或者选择带有MVC的模板,我这里选择的是空模板,便于自己发挥。

    创建之后长这个样子

     第二步:项目创建好之后,开始写核心代码,首先在Controllers创建一个登陆的控制器

    我选择的是MVC5空的控制器,创建之后是这样的,接着右键控制器的名称,为控制器添加视图

    我们先来完成登陆的页面部分

    @model StudentExamOnLine.Models.LoginUserModel
    @{
        Layout = null;
    }
    <body>
    @using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
        <input type="hidden" id="TenantId" name="TenantId" value="" />
        <div class="header text-center">
            <h1 class="text-center" style="color:white">学生在线考试系统</h1>
        </div>
        <div class="loginWraper">
            <div id="loginform" class="loginBox">
                <form class="form form-horizontal" action="index.html" method="post">
                    <div class="row cl">
                        <label class="form-label col-3"><i class="Hui-iconfont">&#xe60d;</i></label>
                        <div class="formControls col-8">
                            @Html.EditorFor(model => model.UserName, new { htmlAttributes = new { @class = "input-text size-L", @placeholder = "账户", @value="admin" } })
                            @Html.ValidationMessageFor(model => model.UserName, "", new { @class = "text-danger" })
                        </div>
                    </div>
                    <div class="row cl">
                        <label class="form-label col-3"><i class="Hui-iconfont">&#xe60e;</i></label>
                        <div class="formControls col-8">
                            @Html.PasswordFor(model => model.UserPwd, htmlAttributes: new { @class = "input-text size-L", @placeholder = "密码" })
                            @Html.ValidationMessageFor(model => model.UserPwd, "", new { @class = "text-danger" })
                        </div>
                    </div>
                    <div class="row cl">
                        <label class="form-label col-3"><i class="Hui-iconfont">&#xe60e;</i></label>
                        <div class="formControls col-8">
                            @Html.DropDownListFor(model => model.UserType, ViewBag.StatusOptions as IEnumerable<SelectListItem>, new { @class = "input-text size-L" })
                            @Html.ValidationMessageFor(model => model.UserType, "", new { @class = "text-danger" })
                        </div>
                    </div>
                
                    <div class="row">
                        <div class="formControls col-8 col-offset-3">
                            <label for="online">
                                <input type="checkbox" name="online" id="online" value="">
                                使我保持登录状态
                            </label>
    
                        </div>
                    </div>
                    <div class="row">
                        <div class="formControls col-8 col-offset-3">
                            <input name="" type="submit" class="btn btn-success radius size-L" value="&nbsp;登&nbsp;&nbsp;&nbsp;&nbsp;录&nbsp;">
                            <input name="" type="button" class="btn btn-primary radius size-L" value="&nbsp;注&nbsp;&nbsp;&nbsp;&nbsp;册&nbsp;">
                            <input name="" type="reset" class="btn btn-default radius size-L" value="&nbsp;取&nbsp;&nbsp;&nbsp;&nbsp;消&nbsp;">
                        </div>
                    </div>
                </form>
            </div>
        </div>
        <div class="footer">Copyright河南厚溥教育</div>
    </body>

    接下来是控制器的部分,我的登录分为两个身份,一个是学生,一个是老师,所以传值的时候做了处理

    // GET: Login
            public ActionResult Index()
            {
                var selectStatusList = new List<SelectListItem>() {
                new SelectListItem() { Value = "1", Text = "学生" },
                new SelectListItem() { Value = "2", Text = "教师" }
                };
    
                ViewBag.StatusOptions = selectStatusList;
                return View();
            }

    然后是具体代码的实现

      private HP_Student_ExamEntities db = new HP_Student_ExamEntities();
    
            /// <summary>
            /// 登录
            /// </summary>
            /// <param name="user">页面模型</param>
            /// <returns></returns>
            [HttpPost]
            public ActionResult Index(LoginUserModel user)
            {
                var selectStatusList = new List<SelectListItem>() {
                new SelectListItem() { Value = "1", Text = "学生" },
                new SelectListItem() { Value = "2", Text = "教师" }
                };
                ViewBag.StatusOptions = selectStatusList;
              
                if (user == null || string.IsNullOrWhiteSpace(user.UserName) || string.IsNullOrWhiteSpace(user.UserPwd))
                {
                    ModelState.AddModelError("", "账号或密码不能为空");
                    return View();
                }
    
                if (user.UserType == "1")
                {
                    Student stu = db.Student.Where(m => m.Name == user.UserName).FirstOrDefault();
                    if (stu == null)
                    {
                        ModelState.AddModelError("", "用户不存在");
                        return View();
                    }
                    else
                    {
                        if (stu.PWD == user.UserPwd)
                        {
                            Session["StudentUser"] = stu;
                            //重定向到学生界面
                            return RedirectToAction("Index", "HomeStudent");
                        }
                        else
                        {
                            ModelState.AddModelError("", "密码错误");
                            return View();
                        }
                    }                
                }
                else if (user.UserType == "2")
                {
                    Teacher teacher = db.Teacher.Where(m => m.Name == user.UserName).FirstOrDefault();
                    if (teacher == null)
                    {
                        ModelState.AddModelError("", "用户不存在");
                        return View();
                    }
                    else
                    {
                        if (teacher.Pwd == user.UserPwd)
                        {
                            Session["teacherUser"] = teacher;
                            //重定向到老师界面
                            return RedirectToAction("Index", "Home");
                        }
                        else
                        {
                            ModelState.AddModelError("", "密码错误");
                            return View();
                        }
                    }
                }
                else
                {
                    ModelState.AddModelError("", "请选择您的身份学生or老师");
                    return View();
                }
    
            }

    3、遇到的问题

    因为我在数据库设计的时候,学生表和教师表设计的是两张不同的表,所以登录穿Model的时候不好判断,到底用户是老师还是学生,这点确实难到我了

    4、解决方法

    我在Model层专门设计了一个类,用来存储用户类型,是学生还是老师,就完美解决了这个问题,代码如下:

        public class LoginUserModel
        {
            public string UserType { get; set; }
            public string UserName { get; set; }
            public string UserPwd { get; set; }
        }

    5、运行效果

     点击登录,进入主页面

     目前项目进度还是比较慢的,后面需要继续加油了

  • 相关阅读:
    理论+实践解析“IT治理”之模式与原则
    iOS开发如何避免安全隐患
    DBA职业发展之路:去“IOE”等挑战之下,DBA将何去何从?
    自动化测试最佳实践(一):从纺锤模型到金字塔模型
    宜信开源|手把手教你安装第一个LAIN应用
    宜信开源|数据库审核软件Themis的规则解析与部署攻略
    开源|性能优化利器:数据库审核平台Themis的选型与实践
    小老板,我300M的网,网速很慢怎么办?
    JSP、ASP、PHP Web应用程序怎么这么多P!
    难道你现在还不知道:C/S和B/S
  • 原文地址:https://www.cnblogs.com/JuneDream/p/13373712.html
Copyright © 2011-2022 走看看