最近在做.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类型。所以,在这个小点上,我花了很长时间。在此做个笔记,与大家分享。
分享到:
相关推荐
【EasyUI+MVC+EF简单用户管理Demo】是一个基于三种技术实现的用户管理系统实例,主要涉及的技术包括:EasyUI(一个基于jQuery的UI框架),ASP.NET MVC(一种用于构建Web应用程序的模式)以及Entity Framework(一个...
在ASP.NET MVC中,视图通常由Razor语法编写的HTML页面组成,它们从控制器接收数据并展示给用户。视图不包含任何业务逻辑,仅用于显示由模型提供的数据。 3. **控制器(Controller)**:控制器是模型和视图之间的...
ASP.NET MVC5 是微软开发的一款用于构建动态、数据驱动的Web应用程序的框架,结合了ASP.NET的功能和模型-视图-控制器(MVC)的设计模式。在这个“ASP.NET + MVC5 入门完整教程七——MVC基本工具(下)”中,我们将...
在这个音乐商城程序中,开发者使用了ASP.NET MVC框架结合Entity Framework(EF)进行数据操作,构建了一个功能完善的在线购物平台。 **1. ASP.NET MVC框架** ASP.NET MVC框架是微软提供的一种轻量级、基于模式的...
通过以上这些知识点,我们可以理解ASP.NET MVC是如何工作并实现页面跳转和数据管理的。这个例子中的MvcApplication1可能包含了实际的控制器、模型、视图和相关的配置文件,展示了如何在实践中运用这些概念。深入学习...
使用ASP.NET Core的Razor Pages可以轻松创建这些页面,并通过EF Core与数据库交互,管理商品、用户和订单信息。React JS.NET则可以用于创建动态、交互性强的商品展示和购物车组件,提升用户体验。 例如,我们可以...
其次,涉及数据库操作,*** MVC框架本身不直接提供数据库操作的功能,但可以利用Entity Framework(EF)等ORM(对象关系映射)工具来简化数据库操作。在文中提到的例子中,是通过添加一个名为Test.edmx的实体数据...
Q757530 Q758222 ASP.NET MVC5 项目如何用jquery把根据EF生成的Creating页面改成自动上传并跳转 https://ask.csdn.net/questions/758222 ASP.NET MVC5项目中如何添加判断让一个链接只出现一次 ...
同时,ASP.NET MVC框架中的EF支持代码优先或数据库优先的开发模式,为数据库操作提供了极大的便利。 此外,ASP.NET还包括状态管理机制,如视图状态、控制状态和Session,用于在页面间保留数据。这些机制使得在用户...
发票管理系统可能需要在多个页面之间保持用户选择的状态,例如,用户可能在填写发票信息的过程中需要跳转到其他页面,这时就需要使用适当的状态管理策略来保留这些信息。 【文件上传与下载】 发票管理系统可能包含...
2. ASP.NET MVC:在MVC模式下,PagedList.Mvc库是一个流行的选择,它允许开发人员创建分页模型,并在视图中轻松地显示分页链接。配合EF(Entity Framework)进行数据库查询时,可以实现高效的数据分页。 3. ASP.NET...
MVC框架提供了灵活的路由系统,使得URL管理和页面跳转更为直观。 3. **ASP.NET Core**:随着技术的发展,微软推出了跨平台的ASP.NET Core,它可以在Windows、Linux和macOS上运行。ASP.NET Core集成了Web API和MVC,...
7. **状态管理**:ASP.NET提供Session、Cookie、ViewData等机制来管理用户会话状态,确保用户在页面跳转间信息不丢失。 8. **错误处理和日志记录**:为了确保系统的稳定运行,源码中可能会有全局错误处理机制,如...
通过设置PageIndex、PageSize属性和Paging事件,开发者可以轻松实现页面跳转和数据加载。 2. **数据库连接**:ASP.NET通过ADO.NET库与数据库进行交互。ADO.NET包含DataSet、DataTable、DataAdapter等组件,用于处理...
- **答案解析**:该方法能正确编译并运行,返回结果为“ef”。 ### 16. Web身份认证接口 题目考察了用于Web身份认证的接口。 - **知识点详解**: - **HttpServletRequest**:代表HTTP请求,可用于获取用户的...
分页的主要目的是为了提高用户体验,当数据库中的数据量过大时,一次性加载所有数据可能会导致页面响应慢,甚至内存溢出。通过分页,用户可以逐页浏览数据,减轻服务器压力,提升加载速度。 在C#中,我们通常使用...
- 验证用户身份:这里检查了`context.User.Identity.IsAuthenticated`,如果用户未登录,则可能执行特定的操作,如返回错误信息或跳转到登录页面。 - 获取上传文件:`HttpPostedFile file = context.Request.Files...