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; }
这个类的结构如下:
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实体验证有什么好的方式可以给我留言。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 分享4款.NET开源、免费、实用的商城系统
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· 记一次.NET内存居高不下排查解决与启示