MVC+EF登陆 并跳转成功页面

最近在做.net 的一个项目,我们的开发是基于MVC+EF+B层和D层以及封装好的底层方法的这样子一个框架。这是一个档案管理系统,毋庸置疑,在做系统时,要先登录。那么,MVC如何实现登陆呢?

思路:

和普通登陆一样,输入用户名和密码,为空判断,然后调用方法,和数据库信息进行对不,若相同,则登陆成功,把ID信息存到session或cookie中,其他页面直接验证session或cookie来判断用户是否登陆。

实现:

常言道,说的容易,做着难。先分析这个需求,按照我的思路,要先建一个controller,然后生成一个view,在view中写好页面。做出提交的按钮。js写出提交后的判断,然后再Ajax调用controller方法,验证,然后跳转页面。

逻辑非常清晰,也不难,下面是我的代码。

view的代码

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>管理系统</title>
    <link href="~/CSS/Loginstyle.css" rel="stylesheet" />
    <link href="~/CSS/Loginbody.css" rel="stylesheet" />
    <link href="~/Content/JqueryEasyUI/themes/default/easyui.css" rel="stylesheet" />
    <link href="~/Content/JqueryEasyUI/themes/icon.css" rel="stylesheet" />
     @*添加Jquery,EasyUI和easyUI的语言包的JS文件*@
    <script src="~/Content/JqueryEasyUI/jquery-1.8.0.min.js"></script>
    <script src="~/Content/JqueryEasyUI/jquery.easyui.min.js"></script>
    <script src="~/Content/JqueryEasyUI/locale/easyui-lang-zh_CN.js"></script>
    <script src="~/Content/DatePicker/WdatePicker.js"></script>
    @*日期格式的引用*@
    <style type="text/css">
<!--
.STYLE1 {
	font-family: Arial, Helvetica, sans-serif;
	font-size: 40px;
}
-->
</style>
     <script type="text/javascript">
        //调用js登陆方法验证用户名,和密码 如果通过,条页面!
         function login() {
             //获取用户名和密码
             var userid = $("#username").val();
             var password = $("#password").val();
             //验证用户名不为空
             if (userid == "" || null ) {
                 $.messager.alert("提示", "请输入用户名", "info");
                 return;
             }
                 //验证密码不为空
             else if (password == "" || null) {
                 $.messager.alert("提示", "请输密码", "info");
                 return;
             } else {
                 //验证通过,调用LoginController中的confirmation()方法,去B层验证密码是否正确
                 $.ajax({
                         url: "/Login/confirmation",
                         data: { userid: userid, password: password },   //传入的数据
                         type: "POST",                                      //返回的类型
                         dataType: 'text',
                         success: function (data) {                         //接收返回的数据 判断 成功则跳页面,失败则返回
                             if (data == "OK") {
                                 //$.messager.alert("提示", "登陆成功,请您重新输入!", "info");
                                 //        //location.reload(true);
                                 window.location.href = "../Main/Main";//你可以跟换里面的网址,以便成功后跳转
                                 //$("#myTable").hide("slow");
                                 //$("#success").show("slow");
                             } else if (data == "error") {
                                 $.messager.alert("提示", "用户名或密码不正确,请您重新输入!", "info");
                                 //$("#error").show("slow");
                                 //$("#load").hide("slow");
                             }else{
                                 alert("输入异常,请重新输入!");}
                         },
                         error: function () { alert("输入异常,请重新输入!") }, //错误提示

                     });

                 }
         }
     </script>
</head>
<body>
    <div>

<!--<input type="text" placeholder="系统"> -->
<h1 class="STYLE1" style="margin-top:40px;margin-left:260px;"><img width="854" height="110" src="~/CSS/index_clip_image002_0005.png" alt="系统" /></h1>

</div >
   <div class="container" style="margin-top:30px;">
	<section id="content">
		<form action="">
			<h1>登录</h1>
			<div>

				<input type="text" placeholder="用户名" required="" id="username" />
			</div>
			<div>
				<input type="password" placeholder="密码" required="" id="password" />
			</div>
			 <div>
				<span class="help-block u-errormessage" id="js-server-helpinfo"> </span></div>
			 <input name="submit" type="button" class="btn btn-primary" id="js-btn-login" value="登录" style="margin-left:120px" onclick ="login()"/>
             @*<input name="submit" type="submit" class="btn btn-primary" id="js-btn-login" value="登录" style="margin-left:120px"/> *@
		    <div>
				@* <input type="submit" value="Log in" /> <a href="#"></a>
				 <a href="#">Register</a>*@ 

			</div>

		</form>
	</section>
</div>
</body>
</html>

然后是controller中的代码

<pre name="code" class="csharp"> /// <summary>
        /// 登陆视图
        /// </summary>
        /// <returns></returns>
        public ActionResult Login()
        {
            return View();
        }

        /// <summary>
        /// d登陆方法验证
        /// </summary>
        /// <returns>OK 或者error</returns>
        public string confirmation()
        {
            //获取前台传回的数据
            string userid = Request["userid"];
            string password = Request["password"];
            //声明spring容器中的LoginBll
            ILoginBll loginbll = SpringHelper.GetObject<ILoginBll>("LoginBll");
            List<UserInfoViewModel> user = loginbll.QueryUser(userid);
            //如果验证通过,则把数据存到session中,返回成功
            if (user[0].pwd == password)
            {
                Session["userID"] = userid;
                Session["realName"] = user[0].realName;
                Session["JID"] = user[0].admin ;
                return "OK";
            }
                //验证不通过,返回失败
            else
            {

                 return "error";
            }

        }

这个登陆,可以说非常简单,但是,在做的过程中,却一再的报错。在调试的过程中,你发现,他哪里都走了,调用也成功了,可是,在最后,就是返回失败。最开始,我一直在思考问题出在哪里,运行时,明明已经返回了OK 为什么还是失败呢?

聪明的你,可能会想到,是Ajax的错误。没错,确实出在了Ajax上,在这里,我好好说说这个错误,也是因为这个错误,我才加上了error: function () { alert("输入异常,请重新输入!") }, //错误提示,这句话。这个错误,其实非常简单,如果,Ajax的返回数据类型是json,那么,在后面的数据接收中,就要判断和解析返回的json数据,但是,我的数据,明显返回的是String类型,在这,我们有注意到,直接给json的dataType一个String的值,就是dataType:
‘String‘,其实,这是一个误区,Ajax的datetype类型是没有String的 ,与之对应的是text类型。所以,在这个小点上,我花了很长时间。在此做个笔记,与大家分享。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-23 02:45:52

MVC+EF登陆 并跳转成功页面的相关文章

分布式缓存--MVC+EF+Memcache

一.从单机到分布式 现在三台机器组成一个Web的应用集群,其中一台机器用户登录,然后其他另外两台机器如何共享登录状态? 解决方案: 1.AspNet进程外的Session . 2.用数据库存数等钱登录状态. 3.Memcache. 二.为什么用Memcache? 1.解决高并发访问数据库带来的死锁 2.多用户端共享缓存 三.Memcache原理 其实memcache是一种windows服务,客户端发来的请求,都会被Socket服务器端接受到.存数使用键值对存储的.客户端进行存储的时候,就是找最接

使用MiniProfiler跟踪MVC + EF + Bootstrap 2 权限管理系统的性能消耗

安装MiniProfiler 在MVC + EF + Bootstrap 2 权限管理系统入门级(附源码)文章中下载了它的源码,调试模式下打开一个页面都要再2.5秒以上,所以使用MiniProfiler.MiniProfiler.MVC4 .MiniProfiler.EF6组件进行了分析. 首先,依次序安装组件.然后,修改Global.aspx.cs 文件: protected void Application_Start() { AreaRegistration.RegisterAllArea

Spring mvc框架 controller间跳转 ,重定向 ,传参

 一.需求背景 1. 需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. @RequestMapping(value = "/activityType", method = RequestMethod.GET) public String activityType(HttpServletRequest request, ModelMap model,RedirectAttribut

登录超时,给出提示跳到登录页面(ajax、导入、导出)

一.一般页面登录超时验证,可以用过滤器filter,如下: package com.lg.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequ

Spring mvc controller间的跳转

1. 需求背景 需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. 本来以为挺简单的一件事情,并且个人认为比较常用的一种方式,一百度全都有了,这些根本不是问题,但是一百度居然出乎我的意料,一堆都不是我想要的结果.无奈啊,自己写一篇比较全都供以后大家一百度吧,哈哈哈...是这些写的不是很全都人们给了我写这篇博客的动力. 2. 解决办法 需求有了肯定是解决办法了,一一解决,说明下spring的跳

ASP.NET MVC+EF框架+EasyUI实现权限管理系列

http://www.cnblogs.com/hanyinglong/archive/2013/03/22/2976478.html ASP.NET MVC+EF框架+EasyUI实现权限管理系列之开篇 前言:博客又有一段时间没有更新了,心里感觉这段时间空空的,好像什么都没有学下,所以就想写博客,所以就有了这个系列,这里当然也要感谢大家了,因这个 项目我已经上传了,得到了很多网友的评价,也有好多人发邮件给我说这个框架容易出现问题,不能访问,这也是支持我写这个系列的动力,我将这个项目写成一个 系列

iOS 开发之 点击tabbarItem添加是否跳转登录页面判断

iOS 开发之 点击tabbarItem添加是否跳转登录页面判断 项目里面在点击tabbarItem的时候需要判断是否是登录状态,如果未登录直接跳转登录页面,如果已登录则直接进入. 首先设置UITabBarController的代理为appdelegate如下:myTabBar.delegate = self; 然后在interface后面写上代理<UITabBarControllerDelegate> 实现代理里面的- (BOOL)tabBarController:(UITabBarCont

ASP.NET MVC+EF框架+EasyUI实现权限管理

4.为什么使用MVC而不是用WebForm呢? (1)为什么使用MVC而不是用WebForm呢?这个是我临时想的,因为我就是想说明一下WebForm和MVC的优缺点,来可以使大家能够更好地理解 MVC和WebForm,而不像某些人说MVC会替代WebForm,我个人认为这个可能性很小,因为各有各的好处,看在哪里使用吧,下面我就简单介绍下 WebForm和MVC的优缺点. (2)WebForm介绍 1)优点 1):支持事件模型,取决于微软提供了丰富的服务器端组建,WebForm可以快速的搭建Web

ASP.NET MVC+EF框架+EasyUI实现权限管理系列(5)-前台JqueryEasyUI前台实现

原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(5)-前台JqueryEasyUI前台实现 ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装 前言:今天经理买了一个诺基亚的Windows Phone 8系统,特感兴趣,所以在哪里看了很长时间,这篇文章就写的有点迟, 从这个Demo开始到现在我已经写了4篇博客了,终于可以看到页面的东