• ASP.NET Core MVC学习笔记(三)


    一、ASP.NET Core MVC中的路由
    路由技术分为常规路由(传统路由)和属性路由。
    常规路由

    app.UseMvc(routes =>
    {
    routes.MapRoute("default", "{controller=Home}/{action=Index}/{id?}");
    });

    属性路由

    app.UseMvc();
    [Route("[Controller]/[action]")]
    [Route("~/")],[Route("{id?}")]
    [Route("Home")]
    [Route("Details/{id?}")]
    ASP.NET Core MVC中的属性路由
    使用属性路由,我们使用Route()属性来定义路由。
    路由属性可应用与控制器或控制器中的操作方法上。
    使用属性路由时,路由属性需要设置再实际使用它们的操作方法上方。
    相比较于传统路由,提供了更多的灵活性。
    属性路由支持层析目录结构。
    重命名控制器或操作方法的名称的时候不需要去修改路由模板规则。

    二、ASP.NET Core MVC中的TagHelper
    服务器端的组件
    在服务器上处理,可以在Razor文件中创建和渲染HTML元素。
    Tag Helpers类似于HTML Helper
    内置的Tag Helper用于常见任务,例如生成链接,创建表单,加载数据等。
    导入内置Tag Helpers
    @addTagHelper *,Microsoft.AspNetCore.Mvc.TagHelpers

    手动编写的链接
    <a href="/home/details/@student.Id" class="btn btn-primary">查看</a>
    使用Tag Helper
    <a asp-controller="home" asp-action="Details" asp-route-id="@student.Id">查看</a>

    ASP.NET Core Image tag helper
    <img src="~/images/3.jpg" asp-append-version="true" />
    Image TagHelper增强了<img>标签,为静止图像文件提供“缓存破坏行为”。
    生成唯一的散列值并将其附加到图片的URL。此唯一字符串会提示浏览器从服务器重新加载图片,而不是从浏览器缓存重新加载。
    只有当磁盘上的文件发生更改时,将会重新计算生成新的哈希值,缓存才会失效。

    ASP.NET Core Environment tag helper
    使用ASPNETCORE_ENVIRONMENT变量设置应用程序环境名称。
    <environment include="Development">
    <link href="~/lib/twitter-bootstrap/css/bootstrap.css" rel="stylesheet" />
    </environment>
    Environment tag helper支持根据不同的环境加载不同的内容。

    三、ASP.NET Core中的模型绑定
    模型绑定是将HTTP请求中的数据映射到控制器操作方法上对应的参数。
    操作方法中的参数可以是简单类型,如整数、字符串等,也可以是复杂类型,如Customer,Employee,Order等。
    要将HTTP的请求数据绑定到控制器操作方法上对应的参数上,模型绑定将按照一下指定的顺序在一下位置查找来自HTTP请求中的数据:
    Form values(表单中值),Route values(路由中的值),Query Strings(查询字符串)。

    ASP.NET Core中的模型验证
    Required 指定该字段是必填的;Range指定允许的最小值和最大值;MinLength指定字符串的最小长度;MaxLength指定字符串的最大长度;Compare比较模型的2个属性。例如,比较Email和ConfirmEmail属性;RegularExpression正则表达式验证提供的值是否与正则表达式指定的模式匹配。
    第一步:在属性上添加验证属性
    [Display(Name="姓名")]
    [Required(ErrorMessage ="请输入名字"),MaxLength(50, ErrorMessage = "名字的长度不能超过50个字符")]
    public string Name { get; set; }

    第二步:使用ModelState.IsValid属性验证属性是成功还是失败

    if (ModelState.IsValid)
    {
        Student newStudent = _studentRepository.Add(student);
        return RedirectToAction("Details", new { id = student.Id });
    }
    return View();

    第三步:使用asp-validation-summary和asp-validation-for标签帮助器来显示错误信息

    <div asp-validation-summary="All"></div>
    <div class="form-group row">
    <label asp-for="Name" class="col-sm-2 col-form-label"></label>
    <div class="col-sm-10">
    <input asp-for="Name" class="form-control" placeholder="请输入名字" />
    <span asp-validation-for="Name" class="text-danger"></span>
    </div>
    </div>

    ASP.NET Core中的<select>验证

    <div class="form-group row">
        <label asp-for="ClassName" class="col-sm-2 col-form-label">        
    </label>
        <div class="col-sm-10">
            <select asp-for="ClassName" asp-items="Html.GetEnumSelectList<ClassNameEnum>()" class="custom-select mr-sm-2">
                <option value="">请选择</option>
            </select>
            <span asp-validation-for="ClassName" class="text-danger">        
    </span>
        </div>
    </div>
  • 相关阅读:
    Codeforces 706B Interesting drink
    hdu 1937 Finding Seats
    poj 2502 Subway
    hdu 1495 非常可乐
    分布式的一些基础知识
    python __new__和__init__
    TCP的time_wait、close_wait状态
    TCP三次握手,四次挥手
    迭代器、生成器
    创建自定义JSR303的验证约束(Creating custom constraints)
  • 原文地址:https://www.cnblogs.com/Lvkang/p/11732304.html
Copyright © 2020-2023  润新知