黑马程序员技术交流社区

标题: 探讨MVC下登陆时根据身份判断定向的多种方式 [打印本页]

作者: 欧玉斌    时间: 2012-10-27 19:24
标题: 探讨MVC下登陆时根据身份判断定向的多种方式
本帖最后由 幻想领域 于 2012-10-27 19:25 编辑

近期为学校做一个课堂业务综合管理系统,主要管理考勤、课后作业、教学日志等信息。
因为要用到MVC2,以前老师没教过,所以自学遇到了很多问题。
比如登陆时判断身份,哪种实现思路比较好。
界面:
先说一下自己的实现思路:
1、前台View加入隐藏域Redirect,JS控制当点击不同单选框时,改变Redirect的值,并post到控制器AccountController的LogOn中
  1. <input type="hidden" id ="Redirect" name="Redirect" value=""/>
  2. <input type="radio" id="Q1"name="Q1" value="Department" onClick="RedirectValue(this.value)" />部门
  3. <input type="radio" id="Radio1"name="Q1" value="Teacher" onClick="RedirectValue(this.value)" />教师
  4. <input type="radio" id="Radio2"name="Q1" value="Student" onClick="RedirectValue(this.value)" />学生
  5. <input type="radio" id="Radio3"name="Q1" value="Counsellor" onClick="RedirectValue(this.value)" />辅导员
  6. <script type="text/javascript">
  7. function RedirectValue(value) {
  8. document.getElementById("Redirect").value = value;
  9. }
  10. </script>
  11. </SPAN>
复制代码
2、控制器AccountController在LogOn中的代码
思路:获取Redirect的值,用于跳转到相应的控制器,如当View选中的是学生时,验证后定向到到学生控制器StudentController的主页index。
  1. [HttpPost]
  2. public ActionResult LogOn(tbTeacher_Info model)
  3. {
  4. if (ModelState.IsValid)
  5. {
  6. string redirect = Request.Form["Redirect"].ToString();//识别身份,用于定向到相应的Controller
  7. long userNum = long.Parse(Request.Form["UserNum"].ToString().Trim());//获取输入的用户名
  8. string passWord = Request.Form["PassWord"].Trim();//获取输入的密码
  9. if (redirect=="Student")
  10. { //获取该学生信息
  11. var rst = mydb.tbStudent_Info.SingleOrDefault(s =>s.StudentNum ==userNum);
  12. if (rst.Password == passWord)
  13. {
  14. Session["StudentNum"] = userNum;
  15. //默认加载2012年上学期第一周数据
  16. Session["year"] = 20121;
  17. Session["week"] = 1;
  18. return RedirectToAction("Index", redirect);//定向到到学生控制器StudentController的主页index
  19. }
  20. else
  21. {
  22. ModelState.AddModelError("", "提供的用户名或密码不正确。");

  23. }
  24. }
  25. else if (redirect == "Teacher")
  26. { //获取该老师信息
  27. var rst = mydb.tbTeacher_Info.SingleOrDefault(m => m.TeacherNum == userNum);
  28. if (rst.Password == passWord)
  29. {
  30. Session["teacherNum"] = userNum;
  31. //默认加载2012年上学期第一周数据
  32. Session["year"] = 20121;
  33. Session["week"] = 1;
  34. return RedirectToAction("Index", redirect);
  35. }
  36. else
  37. {
  38. ModelState.AddModelError("", "提供的用户名或密码不正确。");
  39. }
  40. }
  41. }
  42. // 如果我们进行到这一步时某个地方出错,则重新显示表单
  43. return View(model);
  44. }
复制代码
这是我的实现思路,看看大家有什么其他好的实现办法,比如不使用隐藏域获取身份值,或使用其他的定向方式、其他的验证用户名密码方式(我的验证方式,代码太多,当然,如果写方法的话,会简洁点)。
这段代码主要的问题是验证错误时,无法按预设的方式提示错误,而是报错(因为没有model传进去)
本来想用MVC的Ajax来实现,但又想要JS直接在客户端验证好,不知道哪种方式比较好.大家还有什么好的验证方式?如果用AJax+jquery该怎么写?
在线求解






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2