第一步,在SqlServer数据库中创建存储过程,查询的是用户名(员工姓名)所扮演的角色:

  1. if exists(select * from sys.objects where name='proc_select_Login')
  2. begin
  3. drop procedure proc_select_Login
  4. end
  5. go
  6. create procedure proc_select_Login
  7. @ename nvarchar(), --用户名
  8. @epwd nvarchar() --密码
  9. as
  10. select j.JName from EmployInfo,JobInfo j where EName=@ename and EPwd=@epwd
  11. go

第二步,在Model中业务逻辑EmployeeDao类下创建SelectLogin方法,使用ExecuteScalar()方法查询出用户名(员工姓名)的角色,返回的是字符串类型:

  1. /// <summary>
  2. /// 管理员登录
  3. /// </summary>
  4. /// <param name="ename"></param>
  5. /// <param name="epwd"></param>
  6. /// <returns></returns>
  7. public string SelectLogin(string ename, string epwd)
  8. {
  9. string sql = "proc_select_Login";
  10. SqlCommand cmd = new SqlCommand(sql, con);
  11. cmd.CommandType = CommandType.StoredProcedure;
  12. cmd.Parameters.AddWithValue("@ename", ename);
  13. cmd.Parameters.AddWithValue("@epwd", epwd);
  14. con.Open();
  15. string jName = string.Empty;
  16. jName = Convert.ToString(cmd.ExecuteScalar());
  17. con.Close();
  18. return jName;
  19. }

第三步,在Controller控制器中创建名称为EmployeeController的.cs文件,调用EmployeeDao类下SelectLogin()方法,进行员工登录验证。登录成功,进行页面跳转,并把用户名(员工姓名)和其角色存储到Session中,

注意:string txtCheck 是接受页面中写入的验证码,且与页面中验证码input标签中的name必须一致。

  1. /// <summary>
  2. /// 员工登录验证
  3. /// </summary>
  4. /// <param name="collection"></param>
  5. /// <param name="txtCheck">验证码</param>
  6. /// <returns></returns>
  7. [HttpPost]
  8. public ActionResult Login(FormCollection collection,string txtCheck)
  9. {
  10.  
  11. //接收页面输入的用户名和密码
  12. employ.EName = collection["txtname"];
  13. employ.EPwd = collection["txtpwd"];
  14.  
  15. string str = Convert.ToString(this.TempData["Code"]).ToLower();//接收存在临时数据中的验证码
  16. string jName = dao.SelectLogin(employ.EName, employ.EPwd);
  17.  
  18. if (jName!=string.Empty)
  19. {
  20. if (str != txtCheck.ToLower())
  21. {
  22. ViewBag.ErrorMsg = "验证码错误";
  23. return View(employ);
  24. }
  25. else
  26. {
  27. //使用Session进行储存
  28. this.Session["eName"] = employ.EName;
  29.  
  30. //使用session进行储存
  31. this.Session["jName"] = jName;
  32.  
  33. //this.Session.Add("employ", employ);
  34. return RedirectToAction("Index", "Home");
  35. }
  36. }
  37. else
  38. {
  39. ViewBag.ErrorMsg = "用户名或密码错误";
  40. return View(employ);
  41. }
  42. }
  43. }

第四步,创建登录页面,我这里嵌入的是html代码:

  1. <body>
  2. <form action="/Employee/Login" method="post">
  3. <table border="" align="center" cellpadding="" cellspacing="" style=" margin-top:150px;">
  4. <tr>
  5. <td width="31%" height="" class="login-text02">
  6. 用户名:<br />
  7. </td>
  8. <td width="69%">
  9. <input type="text" name="txtname" id="txtname" @*value="@Model.EName" *@/>
  10. </td>
  11. </tr>
  12. <tr>
  13. <td height="" class="login-text02">
  14. 密 码:<br />
  15. </td>
  16. <td>
  17. <input type="password" name="txtpwd" id="txtpwd" @*value="@Model.EPwd"*@ />
  18. </td>
  19. </tr>
  20. <tr>
  21. <td height="" class="login-text02">
  22. 验证码:<br />
  23. </td>
  24. <td>
  25. <div style="width:400px;">
  26. <input type="text" name="txtCheck" />&nbsp;&nbsp;&nbsp;
  27. <img id="valiCode" style="cursor: pointer;" src="/ValidateCodeImg/Get" title="看不清,点击换一张" alt="看不清?请点我" onclick="imgCodes(this);" />
  28. &nbsp;&nbsp;
  29. <a href="javascript:imgCodes();">看不清楚,点击这里</a>
  30.  
  31. </div>
  32. </td>
  33. </tr>
  34. <tr>
  35. <td height="">
  36. &nbsp;
  37. </td>
  38. <td>
  39. <input type="submit" id="btnlogin" value="登录" class="btn btn-success"/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  40. <input type="reset" value="重 置" class="btn btn-warning"/>
  41. <label style="color:Red;">@ViewBag.ErrorMsg</label>
  42. </td>
  43. </tr>
  44. </table>
  45. </form>
  46. </body>

第五步,在Controller中创建控制器命名为HomeController,接受之前Session中存储的用户和其角色:

  1. public ActionResult Top(FormCollection collecton)
  2. {
  3.  
  4. string eName = Convert.ToString(this.Session["eName"]);//接收存在session中的验证码
  5.  
  6. string jName = this.Session["jName"].ToString();
  7. return View();
  8. }

第六步,为HomeController创建页面,绑定Session中存储的存储的用户名和其角色:

  1. <table width="100%" border="" cellspacing="" cellpadding="">
  2. <tr>
  3. <td>
  4. <img src="@Url.Content("~/Content/images/uesr.gif")" width="" height="">
  5. <span class="STYLE2">
  6. 当前登录用户:@if (Session["eName"] != null)
  7. {
  8. <span>@Session["eName"].ToString()</span>
  9.  
  10. }&nbsp;&nbsp;&nbsp;&nbsp;
  11. 角色:@if (Session["jName"]!=null)
  12. {
  13. <span>@Session["jName"].ToString()</span>
  14. }
  15. </span>
  16. </td>
  17. </tr>
  18. </table>

显示结果:

在mvc中将session的值绑定在页面上的更多相关文章

  1. jquery代码修改input的value值,而页面上input框的值没有改变的解决办法

    问题描述: 在搜索框中输入一些字符,并且点击搜索框右边的五角星做收藏操作时,打开的弹框中Save Search:后面的input中的值被赋值了外面搜索框的值,但是当此次操作完成之后,再次做同样的操作, ...

  2. Spring MVC中Session的正确用法<转>

    Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...

  3. ASP.NET MVC之Session State性能问题(七)

    前言 这一节翻译一篇有关Session State性能问题的文章,非一字一句翻译. 话题 不知道我们在真实环境中是否用到了Session State特性,它主要用来当在同一浏览器发出多个请求时来存储数 ...

  4. 【转】Spring MVC中Session的正确用法之我见

    Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...

  5. ASP.NET MVC中默认Model Binder绑定Action参数为List、Dictionary等集合的实例

    在实际的ASP.NET mvc项目开发中,有时会遇到一个参数是一个List.Dictionary等集合类型的情况,默认的情况ASP.NET MVC框架是怎么为我们绑定ASP.NET MVC的Actio ...

  6. Asp.net Mvc 自定义Session (二)

    在 Asp.net Mvc 自定义Session (一)中我们把数据缓存工具类写好了,今天在我们在这篇把 剩下的自定义Session写完 首先还请大家跟着我的思路一步步的来实现,既然我们要自定义Ses ...

  7. MVC之Session State性能

    ASP.NET MVC之Session State性能问题(七)   前言 这一节翻译一篇有关Session State性能问题的文章,非一字一句翻译. 话题 不知道我们在真实环境中是否用到了Sess ...

  8. Spring MVC中Session的正确用法之我见

    Spring MVC是个非常优秀的框架,其优秀之处继承自Spring本身依赖注入(Dependency Injection)的强大的模块化和可配置性,其设计处处透露着易用性.可复用性与易集成性.优良的 ...

  9. MVC框架中的值提供机制(三)

    在MVC框架中NameValueCollectionValueProvider采用一个NameValueCollection作为数据源,DictionnaryValueProvider的数据源类型自然 ...

随机推荐

  1. %u编码

    Escape/Unescape加密解码/编码解码,又叫%u编码,从以往经验看编码字符串出现有"u",它是unicode编码,那么Escape编码采用是那一种unicode实现形式呢 ...

  2. MySQL Binlog Mixed模式记录成Row格式

    背景: 一个简单的主从结构,主的binlog format是Mixed模式,在执行一条简单的导入语句时,通过mysqlbinlog导出发现记录的Binlog全部变成了Row的格式(明明设置的是Mixe ...

  3. InnoDB全文索引:N-gram Parser【转】

    本文来自:http://mysqlserverteam.com/innodb%E5%85%A8%E6%96%87%E7%B4%A2%E5%BC%95%EF%BC%9An-gram-parser/ In ...

  4. canvas 画板

    <!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title&g ...

  5. STM32F407Discovery开发板使用环境搭建

    差不多4年前买了STM32F407Discovery这块开发板,也用它作为我的毕业设计的一部分,今晚整理一下东西,觉得这么不错的东西应该再次利用起来,做个智能家居系统的一部分什么的也不错,于是,记录一 ...

  6. setTimeout使用闭包功能,实现定时打印数值

    我们这次使用setTimeout来实现一个按照时间定时,依次打印数值的例子.其实在早期的时候,也是我经常犯的一个错误,或者实现这种能力,似乎js比较牵强,其实是我的错,哈哈!没能理解JS强大之处.我们 ...

  7. [LeetCode] Reverse Linked List II

    Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...

  8. javascript设计模式与开发实践

    1. js面向对象6种形式(详情) <!DOCTYPE html> <html> <head lang="en"> <meta chars ...

  9. AutoMapper搬运工之自定义映射

    回顾 上节说到了AutoMapper的简单使用,对于复杂的Mapping需要强大的自定义,这节我们来看下AutoMapper的自定义Mapping(Projection) 搬运自Git:https:/ ...

  10. Android-组件RadioButton使用技巧

    当初第一次接触Android组件的时候,我感觉微信底部的菜单,是用button这样的组件来做的. 可我想错了.却是用RadioButton来做的.那到底怎么做,接下来我就做一下分享!希望看了之后你也觉 ...