zoukankan      html  css  js  c++  java
  • MVC模型绑定

    视图:

     1 @model RegisterViewModel
     2 @{
     3     ViewData["Title"] = "Register";
     4 }
     5 
     6 <h2>@ViewData["Title"]</h2>
     7 
     8 <div class="row">
     9     <div class="col-md-4">
    10         <form asp-route-returnUrl="@ViewData["ReturnUrl"]" method="post">
    11             <h4>Create a new account.</h4>
    12             <hr />
    13             <div asp-validation-summary="All" class="text-danger"></div>
    14             <div class="form-group">
    15                 <label asp-for="Email"></label>
    16                 <input asp-for="Email" class="form-control" />
    17                 <span asp-validation-for="Email" class="text-danger"></span>
    18             </div>
    19             <div class="form-group">
    20                 <label asp-for="Password"></label>
    21                 <input asp-for="Password" class="form-control" />
    22                 <span asp-validation-for="Password" class="text-danger"></span>
    23             </div>
    24             <div class="form-group">
    25                 <label asp-for="ConfirmPassword"></label>
    26                 <input asp-for="ConfirmPassword" class="form-control" />
    27                 <span asp-validation-for="ConfirmPassword" class="text-danger"></span>
    28             </div>
    29             <button type="submit" class="btn btn-default">Register</button>
    30         </form>
    31     </div>
    32 </div>
    33 
    34 @section Scripts {
    35     @await Html.PartialAsync("_ValidationScriptsPartial")
    36 }
    View Code

    对应的控制器操作:

     1   [HttpPost]
     2         [AllowAnonymous]
     3         [ValidateAntiForgeryToken]
     4         public async Task<IActionResult> Register(RegisterViewModel model /*隐式模型绑定*/, string returnUrl = null)
     5         {
     6             var testModel = new TestRegisterModel();
     7             await TryUpdateModelAsync(testModel); //显示模型绑定,从请求的视图中更新当前模型对象
     8 
     9             ViewData["ReturnUrl"] = returnUrl;
    10             if (ModelState.IsValid)
    11             {
    12                 var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
    13                 var result = await _userManager.CreateAsync(user, model.Password);
    14                 if (result.Succeeded)
    15                 {
    16                     _logger.LogInformation("User created a new account with password.");
    17 
    18                     var code = await _userManager.GenerateEmailConfirmationTokenAsync(user);
    19                     var callbackUrl = Url.EmailConfirmationLink(user.Id, code, Request.Scheme);
    20                     await _emailSender.SendEmailConfirmationAsync(model.Email, callbackUrl);
    21 
    22                     await _signInManager.SignInAsync(user, isPersistent: false);
    23                     _logger.LogInformation("User created a new account with password.");
    24                     return RedirectToLocal(returnUrl);
    25                 }
    26                 AddErrors(result);
    27             }
    28 
    29             // If we got this far, something failed, redisplay form
    30             return View(model);
    31         }
    View Code

    隐式绑定参数RegisterViewModel的定义:

     1  public class RegisterViewModel
     2     {
     3         [Required]
     4         [EmailAddress]
     5         [Display(Name = "Email")]
     6         public string Email { get; set; }
     7 
     8         [Required]
     9         [StringLength(100, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 6)]
    10         [DataType(DataType.Password)]
    11         [Display(Name = "Password")]
    12         public string Password { get; set; }
    13 
    14         [DataType(DataType.Password)]
    15         [Display(Name = "Confirm password")]
    16         [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    17         public string ConfirmPassword { get; set; }
    18     }
    View Code

    显式绑定参数TestRegisterModel的定义:

    1 public class TestRegisterModel
    2     {
    3         public string Sex { get; set; }
    4         public string Email { get; set; }
    5     }
    View Code
    • 当操作中有参数时,模型绑定会隐式的工作;如果操作中无参数,则可以使用UpdateModel()和TryUpdateModel()方法显式地调用模型绑定;
    • MVC模型绑定根据参数类型的属性(比如:ID,Title等等),会对应的在请求的视图中寻找对应的相同name属性值的控件的值,并将其传递给该参数的属性上;如果表单中不存在请求中的属性值,则参数的该属性将被自动赋值为空(NULL);
  • 相关阅读:
    保留最大的数
    彩色宝石项链
    [leetcode] 403. Frog Jump
    [leetcode] 402. Remove K Digits
    Linux 更改时区、时间
    Linux系统时间同步方法
    mysql 5.7.28 地理位置计算详解
    springboot微服务项目集成为单体
    地理空间数据Geometry在MySQL中使用(一)
    mysql中geometry类型的简单使用
  • 原文地址:https://www.cnblogs.com/lishidefengchen/p/8150683.html
Copyright © 2011-2022 走看看