0
点赞
收藏
分享

微信扫一扫

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;

}


这个类的结构如下:

MVC最为标准的添加操作(从实体验证到实体入库)_数据有效性

​​

MVC最为标准的添加操作(从实体验证到实体入库)_mvc_02

​​

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实体验证有什么好的方式可以给我留言。

作者:仓储大叔,张占岭,
荣誉:微软MVP



举报

相关推荐

0 条评论