天天看點

ASP.NET Core教程【二】從儲存資料看Razor Page的特有屬性與服務端驗證

前文索引: <a href="http://www.cnblogs.com/liulun/p/7867452.html" target="_blank">ASP.NET Core教程【一】關于Razor Page的知識</a>

在layout.cshtml檔案中,我們可以看到如下代碼:

這段代碼中用到asp-page這樣的一個特有屬性,這是razor page特有的,

這是一個錨點屬性,它的值将被編譯到a标簽的href屬性上;

跟多的時候,我們會像下面這樣使用錨點屬性

 編譯過之後,上面的連結是這樣的

 這很好的把action和controller分開了

下面我們看看把實體送出到資料庫的代碼(cshtml.cs檔案中)

一般我們在OnGet方法中初始化頁面需要的狀态資料;

這個頁面沒有狀态資料需要初始化,是以我們就不用做任何事情

Page()方法傳回一個PageResult對象,該對象負責渲染這個頁面;

Movie屬性被标記了BindProperty标記,說明它是一個“模型綁定”對象;

當表單送出過來的時候,asp.net core負責把表單送出的資料,綁定到這個對象上;

表單送出之後,OnPostAsync方法被執行,

如果送出的資料,在綁定到Movie對象的過程中,産生了異常,那麼Page方法會被重新執行,等于重新整理了一遍頁面;

大部分資料驗證的工作是在用戶端通過JS完成的

但是我們也不能完全依賴JS(防止模拟浏覽器,惡意送出)

用戶端送出上來了一個表單域是一個日期字元串,在綁定到對象屬性的時候,可能産生異常,如果産生了異常,ModelState.IsValid就非真。

接下來看看頁面代碼:

 &lt;form method="post"&gt;在razor page中也是一個特殊标簽,

這個标簽會自動添加一個反僞造令牌,用于防止跨站腳本攻擊;

asp-validation-summary和asp-validation-for都是用于顯示用戶端驗證的失敗資訊的

&lt;label asp-for="Movie.Title" class="control-label"&gt;&lt;/label&gt;會輸出包含标題和for屬性的label标簽;

&lt;input asp-for="Movie.Title" class="form-control" /&gt;會使用模型裡的DataAnnotations屬性,生成能作用域jQuery Validation插件的input标簽;