zoukankan      html  css  js  c++  java
  • EF+MVC+Bootstrap 项目实践 Day5

    一、遗留问题

    1、SaveChanges()不报错:查了些资料,没找到什么,但加了Try/Catch是可以的

    2、Linq插入默认值:也有很多人有同样困惑,都只有变通方法。一种是改成可空,一种是显式传入默认值

    3、查插入默认值资料时,发现好像目前这个叫LinqToSql?和EF还不是一回事?由于基础知识欠缺,只好暂存疑惑,先往下走。

    二、登陆

     1、Form提交表单

    源码就一句Html.BeginForm(),就是提交给自身。Controller里面有两个Login,一个是返回页面的View,一个是认证。头部加上[HttpPost],以便接收Post信息(不会接收Get)

      [AuthorizeIgnore]
            public ActionResult Login()
            {
                return View();
            }
            [HttpPost]
            [AuthorizeIgnore]
            public ActionResult Login(string username, string password, string verifycode)
            {
                if (!VerifyCodeHelper.CheckVerifyCode(verifycode, this.CookieContext.VerifyCodeGuid))
                {
                    ModelState.AddModelError("error", "验证码错误");
                    return View();
                }
                
                var loginInfo = this.AccountService.Login(username, password);
    
                if (loginInfo != null)
                {
                    this.CookieContext.UserToken = loginInfo.LoginToken;
                    this.CookieContext.UserName = loginInfo.LoginName;
                    this.CookieContext.UserId = loginInfo.UserID;
                    return RedirectToAction("Index");
                }
                else
                {
                    ModelState.AddModelError("error", "用户名或密码错误");
                    return View();
                }
            }        

    2、改造

    直接复制过去一大堆红字,显然是不能直接用的。看源码的步骤有几个:检查验证码 -> 检查登陆用户名密码 -> 存进cookie并跳转Index

    错误提示:

    ModelState.AddModelError("error", "验证码错误");
    <div>@Html.ValidationMessage("error") </div>

    原来在Controller里面使用ModelState.AddModelError,会对应到页面上相应的错误提示。并生成

    <span class="field-validation-error" data-valmsg-for="error" data-valmsg-replace="true">验证码错误</span>

    .field-validation-error这个是错误提示默认类,可以自定义样式,也可以直接用bootstrap的help-block类

    <span class="help-block">@Html.ValidationMessage("error")</span>

      

    发现登陆时还会带个权限过去,以判断显示哪些菜单,先跳过吧。。。

    源码用了EntityFramework.Extend,不知是否版本原因,.Delete()方法报错

    折腾了一两小时学习EF。。。发现还是版本问题,要用nuget来重新弄个最新版的就可以,好歹现在可以正常用Delete()方法了

    对于EF,实在是搞不懂。好像各个版本连语法都能不一样?网上搜了些EF的写法,项目里死活点不出来,什么DeleteObject,压根没有?

    EF到底要怎么用啊。。。

     ===============================

    历尽千辛万苦,终于登陆成功了,验证用户名密码正确后,跳转到了Index页。。。

    有几点收获

    1、EntityFramework不用using EntityFramework,引入DLL就算可以了(或用NuGet管理比较方便),要注意和Extend版本一致

    2、表单元素基本写法:@Html.TextBox("username",string.Empty,new {@class = "form-control",placeholder = "用户名"})

    3、各版本EntityFramework好像差别很大,连语法都不同?而且好像还有LinqToSql和LinqToEF的区别,搞的人全晕了,对初学者很不友好。。。

    4、学习了验证码的校验流程(临时存取Cookie或Session、数据库)

    5、学习了登陆时验证、加解密、存取机制

    6、加深了封装的理解。应该先封装一些和项目无关的公共方法(如存取cookie、上传下载等),再封装一些项目中通用的方法(目前是杂在一块了),再指定BLL去调用方法。

    7、类型转换封装,以前在项目中,常用到ToString()或Convert.ToInt32()之类,字符串还好些,可以用Convert.ToString(),数字或时间的,时不时就因为数据有问题而报错。看了这份源码后学会了应该封装成ToInt()、ToDateTime()方法,使用Int.Parse()之类的进行解析,转换失败就返回默认值,避免每次都要去判断。

    8、好像MVC没有BLL?目前是新建相应类放在Modal层里(如AccountBLL.cs),或是要另建BLL层?好像和3层概念不大一样,目前觉得放在Modal层里比较说的通。

    9、Modal层目前是用ADO.NET实体模型,在网上看了一些源码,好像不大一样,除了基本的表结构映射,还有些其它功能。。。不知是手写的还是什么工具生成的,和ADO.NET实体模型生成出来的有所不同,至少没那个模型图。(目前公司用自定义T4模板来映射数据库到实体,感觉也是不错的选择)

  • 相关阅读:
    Python pydoc.py
    Python dir
    HTTPS Web配置举例
    Kubernetes 笔记 03 扫清概念
    一文总结 Linux 虚拟网络设备 eth, tap/tun, veth-pair
    一文掌握 Linux 性能分析之内存篇
    云计算底层技术之高性能集群
    利用 Linux tap/tun 虚拟设备写一个 ICMP echo 程序
    Linux 网络工具详解之 ip tuntap 和 tunctl 创建 tap/tun 设备
    [原创] 详解云计算网络底层技术——虚拟网络设备 tap/tun 原理解析
  • 原文地址:https://www.cnblogs.com/liuyouying/p/5043999.html
Copyright © 2011-2022 走看看