谈谈ASP.NET Core 中的模型绑定

Model Binding 允许我们用 HTTP 请求里的数据来创建 C# 对象,这个对象就是 Action 方法的参数
可以使用以下类型用来 Model Binding:
• int,string 等简单类型
• 复杂类型对象
• 数组
示例:
将 localhost/Albums/Detail/3 绑定到 AlbumController 的 Details(int id) 方法

Model Binder
Model Binding 主要依赖于 Model Binder。Model Binder 从 HTTP 请求的不同部分寻找参数,并将其组合绑定到 Action 的参数。
Model Binder 默认寻找范围:
• Form 表单提交的值
• 路由的值
• QueryString 的值

Binding Attributes
通过 Binding Attributes 自定义绑定。
• Bind:有选择的绑定属性
• BindNever:指定属性不需要绑定
• BindRequired:指定属性必须绑定

示例:使用 Bind 仅绑定 UserName 和 Email 属性,其他属性都是默认值

在这里插入图片描述
指定 Binding 来源
• FromBody:Request Bodys
• FromQuery:QueryStrings
• FromHeader:Request Headers
• FromRoute
• FromForm

public ActionResult List(
    [FromQuery] int id,
    [FromHeader(Name = "Accept")] string accept)
{
    ...
}

比如这里AddUser这个 Action绑定的是UserCreateViewModel这个模型,从HTTP 请求里发来的数据就会映射到这个模型上,从而在Action里构建这个模型的实体,这里是一个ApplicationUser对象,有时也返回自己的新实例对象,返回到客户端用于显示,这是mvvm模式最常用的数据处理逻辑

 public async Task<IActionResult> AddUser(UserCreateViewModel userCreateViewModel)
        {
            //模型验证
            if (!ModelState.IsValid)
            {
                return View(userCreateViewModel);
            }
            //创建user实体
            var user = new ApplicationUser
            {
                UserName = userCreateViewModel.UserName,
                Email = userCreateViewModel.Email,
                BirthDay = userCreateViewModel.BirthDay,
                IDCard = userCreateViewModel.IDCard
            };
            var result = await _userManager.CreateAsync(user, userCreateViewModel.PassWord);
            if (result.Succeeded)
            {
                return RedirectToAction("UserIndex");
            }

            foreach (IdentityError error in result.Errors)
            {
                ModelState.AddModelError(string.Empty, error.Description);
            }
            return View(userCreateViewModel);
        }
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值