简洁的MVC思想框架——Nancy(Post操作与外部引用css和JS)
之前介绍了关于Nancy配置与Get基础操作,以下来介绍有关Nancy的Post操作。
第一步,设计主界面,以登录界面为例:Login.cshtml
路径为:
设计好页面后,在之前的modules类中设定指向路径和相关post操作,如下图所示:
<body> <div id="login"> <form action="/Home" method="post" id="form1"> <div id="bigimg"> <img src="images/bigimg.jpg" /> </div> <div id="loginbox"> <div id="title-login">登录</div> <a id="title-register" href="#">注册账号 ></a> <div id="forinput"> 帐号:<br> <p> <input id="user" name="userId" tabindex="1" type="text"> <span id="error_userId"></span> </p>密码: <a href="#" style="color: #00A1D6; float: right; *margin-top: -10px; display: block;"> 忘记了密码? </a> <br> <p> <input id="password" type="password" tabindex="2" name="userPwd"> <span id="error_userPwd"></span> </p> 验证码: <br> <p> <input id="code" name="verifity" tabindex="3" type="text"> <span> <img id="Verifity" onclick="src = '/CreateCode?'+Math.random()" src="/CreateCode" style="vertical-align: middle;"> </span> <span id="error_code" style="margin-left: 18px;"></span> </p> </div> <input type="submit" id="submit" value="登 录" onclick="return checkLogin()"> </div> </form> </div> </body>
1 #region 登录——表单验证,成功跳转至主页面 2 3 Post["/Home"] = p => 4 { 5 //获取表单 6 var user = SqlHelperServer.ToDBValue(Request.Form); 7 //验证用户名是否存在 8 if (!userService.isUserId(user.userId)) 9 { 10 return "<script>alert('用户名不存在!');location.href='/'</script>"; 11 } 12 //验证密码输入是否正确 13 if (userService.GetUserPwd(user.userId) != user.userPwd) 14 { 15 return "<script>alert('密码错误!');location.href='/'</script>"; 16 } 17 if (user.verifity != Session["Code"].ToString()) 18 { 19 return "<script>alert('验证码错误!');location.href='/'</script>"; 20 } 21 ViewBag.UserId = user.userId; 22 DataTable dt = userService.GetUser(); 23 return View["User/Home.cshtml", dt.Rows]; 24 }; 25 26 #endregion
其中关于Sqlhelperserver是有关数据库操作公共类,其中ToDBvalue是获取页面传入所有html的表单数据,其中标签必须有“name”属性。
public static object ToDBValue(this object value) { return value == null ? DBNull.Value : value; }
至此,Post操作完成!
其中还涉及到有关引用外部JS和外部css的文件,这根普通的MVC不一样,也经过相当长的研究才摸索出来,最后发现很简单,只要在modules新建一个类,如下:
public class Bootstrapper : DefaultNancyBootstrapper { protected override void ConfigureConventions(NancyConventions nancyConventions) { base.ConfigureConventions(nancyConventions); nancyConventions.StaticContentsConventions.Clear(); nancyConventions.StaticContentsConventions.Add (StaticContentConventionBuilder.AddDirectory("css", "/css")); nancyConventions.StaticContentsConventions.Add (StaticContentConventionBuilder.AddDirectory("js", "/script")); nancyConventions.StaticContentsConventions.Add (StaticContentConventionBuilder.AddDirectory("images", "/images")); } }
在之后还会讲解关于验证码的获取与Session的相关操作,至于其他跟MVC类似,无多大变动。
真正的谦卑是对真理持续不断的追求。