• ASP NET Core Razor页面教程的笔记


    一.Query String Parameters in Razor Pages的顺序

    1.从前端的

    1. <a asp-page="/Employees/Details" asp-route-ID="@employee.Id"
    2. class="btn btn-primary m-1">Viewa>

    通过默认,ID是参数。变成 https://localhost:7030/Employees/Details?ID=1

    2.https://localhost:7030/Employees/Details?ID=1

    到项目下 Employees文件夹下的Details.cshtml.cs

    1. using Microsoft.AspNetCore.Mvc;
    2. using Microsoft.AspNetCore.Mvc.RazorPages;
    3. using RazorPagesTutorialModels;
    4. using RazorPagesTutorialServices;
    5. namespace RazorPagesTutorial.Pages.Employees
    6. {
    7. public class DetailsModel : PageModel
    8. {
    9. private readonly IEmployeeRepository employeeRepository;
    10. public DetailsModel(IEmployeeRepository employeeRepository)
    11. {
    12. this.employeeRepository=employeeRepository;
    13. }
    14. public Employee Employee { get; private set; }
    15. public void OnGet(int id)
    16. {
    17. Employee=employeeRepository.GetEmployee(id);
    18. }
    19. }
    20. }

    二.参数传值

    模型绑定将路由参数值绑定到OnGet()方法参数上。

    三  路径约束

     @page 可以传值,也可以限制路径(匹配原则),还可以限制传参的类型

    限制参数的类型如下:

    还可以限制参数的范围,如:

     

    自定义路径约束

    1.首先我们需要在 最后跳转的页面加上路径的限制,主要的是page属性id后面加的限制

    1. @page "/employees/view/{id:even}"
    2. @model RazorPagesTutorial.Pages.Employees.DetailsModel
    3. @{
    4. ViewData["Title"] = "Detail";
    5. var photPath = "~/images/" + (Model.Employee.PhotoPath ?? "noimage.jpg");
    6. }
    7. Detail

    2.我们需要生成一个具体限制的类,这个类必须继承IRouteConstraint

    1. using System;
    2. using System.Collections.Generic;
    3. using Microsoft.AspNetCore.Http;
    4. using Microsoft.AspNetCore.Routing;
    5. namespace RazorPagesTutorial
    6. {
    7. public class EventConstraint:IRouteConstraint
    8. {
    9. public bool Match(HttpContext? httpContext, IRouter? route, string routeKey, RouteValueDictionary values, RouteDirection routeDirection)
    10. {
    11. //throw new NotImplementedException();
    12. int id;
    13. if (Int32.TryParse(values["id"].ToString(), out id))
    14. {
    15. if(id %2== 0)
    16. {
    17. return true;
    18. }
    19. }
    20. return false;
    21. }
    22. }
    23. }

    3.我们需要配置限制

    在startup的配置文件里面

    添加

    1. public void ConfigureServices(IServiceCollection services)
    2. {
    3. services.AddRazorPages();
    4. services.AddSingleton();
    5. services.Configure(options =>
    6. {
    7. options.ConstraintMap.Add("even",typeof(EventConstraint));
    8. });
    9. }

    具体对应关系如下:

    四. 错误页面的处理 重定向

    五,修改

    完成修改的整个流程

    1.页面点击修改

    所以页面有修改的按键,并且传值id

    1. class="card-footer text-center">
  •  我们可以在列表的每条信息中设计修改的按钮,点击按钮asp-page,访问 https://localhost:7030/employees/edit/?id=1

    2.根据链接 https://localhost:7030/employees/edit/?id=1 找到

    Edit的cs文件

    1. using Microsoft.AspNetCore.Mvc;
    2. using Microsoft.AspNetCore.Mvc.RazorPages;
    3. using RazorPagesTutorialModels;
    4. using RazorPagesTutorialServices;
    5. namespace RazorPagesTutorial.Pages.Employees
    6. {
    7. public class EditModel : PageModel
    8. {
    9. private readonly IEmployeeRepository employeeRepository;
    10. //先访问构造函数
    11. public EditModel(IEmployeeRepository employeeRepository) {
    12. this.employeeRepository = employeeRepository;
    13. }
    14. public Employee Employee { get; set; }
    15. //访问OnGet方法,此方法判断是否能查询到信息,重定向到不同的页面
    16. public IActionResult OnGet(int id)
    17. {
    18. Employee=employeeRepository.GetEmployee(id);
    19. if(Employee == null)
    20. {
    21. return NotFound();
    22. }
    23. //进入Edit的页面
    24. return Page();
    25. }
    26. //进入Edit的页面后
    27. public IActionResult OnPost(Employee employee)
    28. {
    29. Employee=employeeRepository.Update(employee);
    30. return RedirectToPage("Index");
    31. }
    32. }
    33. }

     注意Onpost方法是form表单提交,提交的对象,然后走update的方法处理,Services层,然后返回Index页面。

    1. @page
    2. @model RazorPagesTutorial.Pages.Employees.EditModel
    3. @{
    4. ViewData["Title"] = "Edit";
    5. }
    6. Edit

    7. "post" class="mt-3">
    8. for="Employee.Id" />
    9. class="form-group row">
    10. class="col-sm-10">
    11. for="Employee.Name" class="form-control" placeholder="Name" />
  • class="form-group row">
  • class="col-sm-10">
  • for="Employee.Email" class="form-control" placeholder="Email" />
  • class="form-group row">
  • class="col-sm-10">
  • <select asp-for="Employee.Department" class="custom-select mr-sm-2"
  • asp-items="Html.GetEnumSelectList()">
  • select>
  • class="form-group row">
  • class="col-sm-10">
  • 需要注意的是:前端所引用的对象,需要在_ViewImports.cshtml里面写好引用。例如

    1. //using 这个地方是namespace
    2. @using RazorPagesTutorial
    3. @using RazorPagesTutorialModels
    4. @namespace RazorPagesTutorial.Pages
    5. @addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers

     

    五.临时数据

    六.页面验证

    关于页面验证

     

     

     

     

  • 相关阅读:
    base64图片的优缺点(雪碧图)
    重磅!这本30w人都在看的Python数据分析畅销书:更新了!
    小样本利器2.文本对抗+半监督 FGSM & VAT & FGM代码实现
    idea插件开发问题
    Go 文件操作
    排序-算法
    网络信息通信的安全问题以及解决方法
    (Linux)Ubuntu的软件升级 —— update、upgrade、dist-upgrade、full-upgrade
    PySpark数据分析基础:pyspark.mllib.regression机器学习回归核心类详解(二)+代码详解
    mysql数据库,字符串使用双引号““导致报错,使用单引号‘‘不报错,Unknown column ‘user-test‘ in ‘where clause‘
  • 原文地址:https://blog.csdn.net/hellolianhua/article/details/127981821