學習ASP.NET Core Razor 編程系列五——Asp.Net Core Razor新建模板頁面


學習ASP.NET Core Razor 編程系列目錄

學習ASP.NET Core Razor 編程系列一

學習ASP.NET Core Razor 編程系列二——添加一個實體

 學習ASP.NET Core Razor 編程系列三——創建數據表及創建項目基本頁面

學習ASP.NET Core Razor 編程系列四——Asp.Net Core Razor列表模板頁面

 

 

         上一篇文章中我們學習了列表頁面的結構,@page與@model兩個關鍵Razor指令,以及頁面布局應該修改哪里。這一篇文章我們來學習一下新建頁面。

          首先,我們在Visual Studio 2017的解決方案管理器中,打開Pages/Books/Create.cshtml.cs 文件,這個文件中的的代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using RazorMvcBooks.Models;
 

namespace RazorMvcBooks.Pages.Books
{
    public class CreateModel : PageModel
    {
        private readonly RazorMvcBooks.Models.BookContext _context;
        public CreateModel(RazorMvcBooks.Models.BookContext context)
        {
            _context = context;
        }

        public IActionResult OnGet()
        {
            return Page();
        }

        [BindProperty]
        public Book Book { get; set; }
        public async Task<IActionResult> OnPostAsync()
        {
            if (!ModelState.IsValid)
            {
                return Page();
            }

            _context.Book.Add(Book);
            await _context.SaveChangesAsync();
            return RedirectToPage("./Index");
        }
    }
}

 

        OnGet 方法與上一篇文章中的OnGetAsync方法實現的功能一樣,都是進行頁面初始化。 但是“新建”頁面沒有任何要初始化的狀態。 Page方法會創建一個用於呈現 “新建”頁面內容的 PageResult 對象。

        屬性Book使用 [BindProperty] 特性綁定到“新建”頁面實例對象中。 當“新建”頁面的表單把表單中的值以POST的方式發送到后台時,ASP.NET Core 運行時會將表單中的值綁定到 Book實體上。

 

        在頁面中點擊“Create”按鈕,即通過POST方法發出表單數據請求時,Asp.Net Core將調用 OnPostAsync 方法:  

public async Task<IActionResult> OnPostAsync()
        {

            if (!ModelState.IsValid)
            {
                return Page();
            }

            _context.Book.Add(Book);
            await _context.SaveChangesAsync();
            return RedirectToPage("./Index");
        }

        如果有任何錯誤,沒有通過校驗規則,頁面將重新顯示表單,以及我們剛才填寫的數據。 在表單發出請求前,也可以通過在客戶端添加校驗而捕獲到大部分錯誤。 例如以下的一個錯誤示例,表單中填寫的日期字段值無法轉換為日期格式數據。

 

           如果不存在錯誤,應用程序將會把我們填寫的數據保存到數據庫,並且瀏覽器會重定向到書籍列表頁面,在書籍列表頁面中的書籍列表中會出現我們剛才保存的數據。如下圖。

         新建頁面的 Razor 前台頁面

        接下來我們在Visual Studio 2017的解決方案資源管理器中使用鼠標左鍵雙擊打開 Pages/Books/Create.cshtml Razor文件,文件中的內容如下:

@page
@model RazorMvcBooks.Pages.Books.CreateModel
@{
    ViewData["Title"] = "Create";
}
<h2>Create</h2>
<h4>Book</h4>
<hr />
<div class="row">
    <div class="col-md-4">
        <form method="post">
            <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Book.Name" class="control-label"></label>
                <input asp-for="Book.Name" class="form-control" />
                <span asp-validation-for="Book.Name" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Book.ReleaseDate" class="control-label"></label>
                <input asp-for="Book.ReleaseDate" class="form-control" />
                <span asp-validation-for="Book.ReleaseDate" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Book.Author" class="control-label"></label>
                <input asp-for="Book.Author" class="form-control" />
                <span asp-validation-for="Book.Author" class="text-danger"></span>
            </div>
            <div class="form-group">
                <label asp-for="Book.Price" class="control-label"></label>

                <input asp-for="Book.Price" class="form-control" />
                <span asp-validation-for="Book.Price" class="text-danger"></span>
            </div>
            <div class="form-group">
                <input type="submit" value="Create" class="btn btn-default" />
            </div>
        </form>
    </div>
</div>
<div>
    <a asp-page="Index">Back to List</a>
</div>
@section Scripts {
    @{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}

 

        Visual Studio以一種獨特的字體顯示<form method="post"> 標記,如下圖:

 

        <form method="post"> 元素是一個表單標記助手。 表單標記助手會自動包含防偽標記。

        基架引擎在Razor頁面中為每個字段(ID 除外)創建一個類似下面的 Razor 標簽,如下所示: 

  <div asp-validation-summary="ModelOnly" class="text-danger"></div>
            <div class="form-group">
                <label asp-for="Book.Name" class="control-label"></label>
                <input asp-for="Book.Name" class="form-control" />
                <span asp-validation-for="Book.Name" class="text-danger"></span>
            </div>

      對於上述代碼中的一些輔助助手介紹如下:

      校驗標簽助手(<div asp-validation-summary 和 <span asp-validation-for)顯示驗證錯誤。

      標簽輔助助手 (<label asp-for="Book.Name" class="control-label"></label>) 為實體對象字段生成描述標簽標題和屬性。

       輸入輔助助手 (<input asp-for="Book.Name" class="form-control" />) 在實體類上采用dataannotations屬性,就可以在在客戶端生成 jQuery 驗證所需的 HTML 屬性。

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM