zoukankan      html  css  js  c++  java
  • MVC最为标准的添加操作(从实体验证到实体入库)

    以用户注册为例,来说一下MVC中向数据表中添加数据的方法

    从WEB层说起:有两个action,分别实现显示注册界面和提交注册请求的作用,在action中,对表单实体进行了数据有效性的验证,代码如下:

    public ActionResult Register()
           {
               return View();
           }
    
           [HttpPost]
           public ActionResult Register(UserBases entity)
           {
               if (entity.IsValid)
               {
    
                   if (iUserRepository.RegisterUser(entity).IsComplete)
                   {
                       #region 写′cookies
    
                       #endregion
                       return RedirectToAction("RegSuccess", "Account");
                   }
                   else
                   {
                       ModelState.AddModelError("", "注¢册á用?户§失§败ü");
                   }
               }
               else
               {
                   entity.GetRuleViolations().ToList().ForEach(i =>
                   {
                       ModelState.AddModelError(i.PropertyName, i.ErrorMessage);
                   });
               }
               return View();
           }
    省略一下BLL层,直接用DATA层了,它主要有个性操作接口和统一操作接口,一个实体操作分别要继承这两个接口,及一个提代数据库上下文和CURD操作的基类,代码如下:
    public class UserRepository : Car_RentalRepositoryBase, IUserRepository
        {
    
            #region IUserRepository 成é员±
    
            public VMessage RegisterUser(UserBases entity)
            {
                VMessage vm = new VMessage();
                try
                {
                    base.InsertEntity(entity);
                    vm.IsComplete = true;
                }
                catch (Exception)
                {
                    vm.IsComplete = false;
                    throw;
                }
                return vm;
    
            }

    }

    这个类的结构如下:

    image

    DATA层向WEB层返回信息是统一的消息对象VMessage,它个类由一个bool型的属性和一个实体对象组成。

    最后说明一点,就是在MVC模式下,进行前台表单验证时,直接用ModelState.AddModelError方法就可以把错误信息直接绑定到属性的上面,非常方便,在调用时

    代码如下:

    entity.GetRuleViolations().ToList().ForEach(i => { ModelState.AddModelError(i.PropertyName, i.ErrorMessage); });

    还有一个要说明的就是GetRuleViolations这个方法,它是我们在实体中定义的,将所有不通过证明的信息,以迭代的方式进行返回,代码如下:

    /// <summary>
        /// 用户实体数据级验证(数据有效性验证)
        /// </summary>
        public partial class UserBases
        {
            public override IEnumerable<RuleViolation> GetRuleViolations()
            {
                if (string.IsNullOrEmpty(this.UserID))
                    yield return new RuleViolation(ValidatorMessage.Current.GetMessage(ValidatorMessageType.RequiredField, "UserID"), "UserID");
                if (string.IsNullOrEmpty(this.Email))
                    yield return new RuleViolation("请输入电子邮件", "Email");

                if (string.IsNullOrEmpty(this.Name))
                    yield return new RuleViolation("用户名不能为空", "Name");

            }

       }

    大家如果对MVC实体验证有什么好的方式可以给我留言。

  • 相关阅读:
    启动dr-elephant失败问题
    hive2.3 任务因一个map导致进程oom挂掉的排查
    hive客户端远程debug
    jdk命令行工具
    hadoop联邦集群 Hive 服务不重启udf函数生效
    livy server高并发下报错java.lang.RuntimeException: java.io.IOException: Unable to connect to provided ports 10000~10010
    使用apache livy导致的结果集不一致问题记录
    spark与hive引擎差异致结果集不一致
    mysql终止当前正在执行的sql语句
    Linux 修改文件目录权限
  • 原文地址:https://www.cnblogs.com/lori/p/2441548.html
Copyright © 2011-2022 走看看