• ASP.NET Core 六:模型与模型绑定,模型特性,客户端提交可能会遇到的坑


    概念说明:

    最佳方法:比如我们用表单访问服务器的时候,用Asp-Action=“SaveValue”来指定方法名称,系统会在控制器下找到一个叫做SaveValue的最佳方法来调用,默认并不会在意这个方法是否有参数,或者参数是什么类型(除非有【Post】或者【Get】特性限制)

    模型绑定,是指我们在服务端访问客户端的时候,服务端的数据数据的实例化。实例化的数据包含控制器的属性,方法的参数。通常情况下对于方法,系统会提供默认参数的绑定。

    数据类型,系统提供了基本类型,复合类型(class),数组类型,字典,文件类型等大部分数据类型的模型绑定,以及自定义类型。

    但是正如我们前面提过,官方只是提供了一个普遍的解决方案,我们仍然可以通过访问HttpContext自定义处理具体的数据。

    模型特性,模型特性可以用于设置模型的属性名称,长度,是否可绑定等等

    自定义模型绑定,可以自定义自己的模型绑定,而不使用系统提供的绑定。

    对于模型我们可以设置参数,比如[BindProperty(Name=xx)]来指定对应的关键名称

    模型主要是通过名称来绑定,我们可以通过给模型的属性设置注解Display(Name="xx")来设置对应的名称,如果没有设置,系统默认使用标识符作为名称

    参考官方文档:ASP.NET Core 中的模型绑定 | Microsoft Docs

    模型绑定:

    下面我们可以看到,无论是属性还是参数都可以进行模型绑定

        public class TestInfo
        {
            public string Id { get; set; }
            public string Name { get; set; }
            public string Des { get; set; }
        }
        [BindProperties]//让所有属性定义可绑定
        public class HomeController : Controller
        {
            public IActionResult Index()
            {
                return View();
            }
    
            //[BindProperty]
            [FromForm]
            public TestInfo? TestInfo { get; set; }
    
            public TestInfo? TestInfo01 { get; set; }
    
    
            //public IActionResult Deal00([FromForm]TestInfo testInfo)
            //{
            //    return RedirectToAction("Index");
            //}
    
            //public IActionResult Deal00(TestInfo testInfo)
            //{
            //    return RedirectToAction("Index");
            //}
    
            //public IActionResult Deal00()
            //{
            //    return RedirectToAction("Index");
            //}
    
            //public IActionResult Deal00(string id,string name,[FromForm(Name ="Name")]string des)
            //{
            //    return RedirectToAction("Index");
            //}
    
            public IActionResult Deal00([Bind("Id,Name,Des")] TestInfo testInfo)
            {
                return RedirectToAction("Index");
            }
        }
    @using ModelBindTest.Models;
    @model TestInfo
    @{
        ViewData["Title"] = "Home Page";
    }
    
    <div class="text-center">
        <form asp-controller="Home" asp-action="Deal00" method="post">
            <label>id</label>
            <input asp-for="Id" />
            <label>name</label>
            <input asp-for="Name" />
    @*        <label>Des</label>
            <input asp-for="Des" />*@
            <input type="submit" />
        </form>
    </div>
    
    //下面由于name的缘故,不能正确的进行模型绑定 <div class="text-center"> <form asp-controller="Home" asp-action="Deal00" method="post"> <label>id</label> <input asp-for="Id" name="T1" /> <label>name</label> <input asp-for="Name" name="T2"/> <label>Des</label> <input asp-for="Des" name="T3"/> <input type="submit" /> </form> </div>

    客户端提交可能会遇到的坑

    我们在从客户端提交数据的时候,常常会遇到绑定为空的情况,一般这种情况是由于键名称不对应造成的,比如在客户端

    <Input asp-for="A.B">

    如果B属性没有Display(Name="xx")注解,那么提交到服务端的表单或者请求的名称就是“A.B”

    解决方案是,我们可以通过设置Display注解来设置,或者设置提交的名称,比如<Input asp-for="A.B" name="B">

  • 相关阅读:
    springMVC中@RequestParam和@RequestBody的作用
    java 中Excel的导入导出
    数据库字段名称与实体类属性不一致的处理措施
    linux下解压命令大全
    linux 下 cat
    mysqli
    解析php mysql 事务处理回滚操作(附实例)
    css 样式(checkbox开关、css按钮)
    cetons 怎么强制卸载 PHP
    yhdsir@function:php
  • 原文地址:https://www.cnblogs.com/xiaoahui/p/16078187.html
Copyright © 2020-2023  润新知