黑马程序员技术交流社区
标题: 探讨MVC下登陆时根据身份判断定向的多种方式 [打印本页]
作者: 欧玉斌 时间: 2012-10-27 19:24
标题: 探讨MVC下登陆时根据身份判断定向的多种方式
本帖最后由 幻想领域 于 2012-10-27 19:25 编辑
近期为学校做一个课堂业务综合管理系统,主要管理考勤、课后作业、教学日志等信息。
因为要用到MVC2,以前老师没教过,所以自学遇到了很多问题。
比如登陆时判断身份,哪种实现思路比较好。
界面:
先说一下自己的实现思路:
1、前台View加入隐藏域Redirect,JS控制当点击不同单选框时,改变Redirect的值,并post到控制器AccountController的LogOn中
- <input type="hidden" id ="Redirect" name="Redirect" value=""/>
- <input type="radio" id="Q1"name="Q1" value="Department" onClick="RedirectValue(this.value)" />部门
- <input type="radio" id="Radio1"name="Q1" value="Teacher" onClick="RedirectValue(this.value)" />教师
- <input type="radio" id="Radio2"name="Q1" value="Student" onClick="RedirectValue(this.value)" />学生
- <input type="radio" id="Radio3"name="Q1" value="Counsellor" onClick="RedirectValue(this.value)" />辅导员
- <script type="text/javascript">
- function RedirectValue(value) {
- document.getElementById("Redirect").value = value;
- }
- </script>
- </SPAN>
复制代码2、控制器AccountController在LogOn中的代码
思路:获取Redirect的值,用于跳转到相应的控制器,如当View选中的是学生时,验证后定向到到学生控制器StudentController的主页index。
- [HttpPost]
- public ActionResult LogOn(tbTeacher_Info model)
- {
- if (ModelState.IsValid)
- {
- string redirect = Request.Form["Redirect"].ToString();//识别身份,用于定向到相应的Controller
- long userNum = long.Parse(Request.Form["UserNum"].ToString().Trim());//获取输入的用户名
- string passWord = Request.Form["PassWord"].Trim();//获取输入的密码
- if (redirect=="Student")
- { //获取该学生信息
- var rst = mydb.tbStudent_Info.SingleOrDefault(s =>s.StudentNum ==userNum);
- if (rst.Password == passWord)
- {
- Session["StudentNum"] = userNum;
- //默认加载2012年上学期第一周数据
- Session["year"] = 20121;
- Session["week"] = 1;
- return RedirectToAction("Index", redirect);//定向到到学生控制器StudentController的主页index
- }
- else
- {
- ModelState.AddModelError("", "提供的用户名或密码不正确。");
- }
- }
- else if (redirect == "Teacher")
- { //获取该老师信息
- var rst = mydb.tbTeacher_Info.SingleOrDefault(m => m.TeacherNum == userNum);
- if (rst.Password == passWord)
- {
- Session["teacherNum"] = userNum;
- //默认加载2012年上学期第一周数据
- Session["year"] = 20121;
- Session["week"] = 1;
- return RedirectToAction("Index", redirect);
- }
- else
- {
- ModelState.AddModelError("", "提供的用户名或密码不正确。");
- }
- }
- }
- // 如果我们进行到这一步时某个地方出错,则重新显示表单
- return View(model);
- }
复制代码这是我的实现思路,看看大家有什么其他好的实现办法,比如不使用隐藏域获取身份值,或使用其他的定向方式、其他的验证用户名密码方式(我的验证方式,代码太多,当然,如果写方法的话,会简洁点)。
这段代码主要的问题是验证错误时,无法按预设的方式提示错误,而是报错(因为没有model传进去)
本来想用MVC的Ajax来实现,但又想要JS直接在客户端验证好,不知道哪种方式比较好.大家还有什么好的验证方式?如果用AJax+jquery该怎么写?
在线求解
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |