HTML helper是在視圖頁面上操作HTML元素時可以調用的方法,還包括URL helper和AJAX helper。這些幫助方法都為了使得操作HTML更加容易。分為兩類:a.編輯和輸入幫助類b.顯示和渲染幫助類。
1實質
Razor視圖繼承了基類的HTML屬性。HTML屬性的類型是HtmlHelper<T>,T代表了傳遞給視圖的模型類型。大多是的輔助方法都是擴展方法。
2自動實現HTML編碼
如@Html.TextArea("text", "hello <br/> world") 對應的HTML代碼
<textarea cols="20" id="text" name="text" rows="2">hello <br /> world</textarea>
3幾乎所有的helper方法都可以添加一個控制HTML屬性的參數
參數類型是IDictionary<string,object>,用來創建HTML控件的屬性,在需要的情況下可以創建許多的屬性。如:@using (Html.BeginForm("Search", "Home", FormMethod.Get, new { target = "_blank" })){}
但是需要注意的是:1)當設置css class=""時 由於class是關鍵字需要 寫作@class=""
2)當屬性名字中含"-"時,由於c#中命名不能含有"-",所以要寫成"_",幫助方法可以自動轉換
4 Html.ValidationSummary
匯總顯示ModelState Dictionary中的信息。通過后台可以添加關於實體或者實體屬性的錯誤消息:
1)ModelState.AddModelError("", "This is all wrong!"); //當有錯誤產生時(即使是一個屬性)就會顯示
2)ModelState.AddModelError("Title", "What a terrible name!"); //為屬性Title添加錯誤消息
與其相似的@Html.ValidationMessageFor(model => model.Nickname) 一般跟在一個需要填寫的屬性后面。
5強類型Helper
通過強類型Helper可以傳遞一個Lambda表達式來指定要呈現的實體屬性。表達式的實體類型由View()傳遞過來,在視圖中用@model指令 指定 類型。強類型Helper在原有Helper基礎上加了一個"For"后綴。
強類型Helper的好處:1)有智能提示
2)便於重構(在model 中更改了屬性名稱時,時用了強類型helper的Html可以進行自動更改)
6 Helper和Model Metadata(元數據)
幫助類不僅僅能夠自動探測到ViewData的數據,還可以從元數據獲益。如:@Html.Label("GenreId") 與之對應的HTLML代碼是: <label for="GenreId">Genre</label>。Genre元數據的定義:
[DisplayName("Genre")]
public int GenreId { get; set; }
可見HTML中的Genre就是從元數據的[DisplayName("Genre")]來的。
7 模板輔助方法
主要有兩個:Html.Display 和 Html.Editor(對應的強類型方法Html.DisplayFor 和 Html.EditorFor)。好處是可以通過數據注解來改變生成的HTML。
如:當模型的Title屬性含[DataType(DataType.MultilineText)]注解時,當使用@Html.EditorFor(m=>m.Title) 時,會自動生成textarea控件。
還有Html.DisplayForModel 和 Html.EditorForModel也是模板輔助方法。
8.列舉大部分的輔助方法
a.輸入編輯類
TextBox(TextArea) DropDownList(ListBox—可選擇多項) Label Hidden Password RadioButton CheckBox
b.顯示和渲染類
1)ActionLink RouteLink
2)URL輔助方法
@Url.Action(顯示URL,不是鏈接) @Url.Content(將程序相對路徑轉換為絕對路徑)
3)Html.Partial和Html.RenderPartial
4)Html.Action和Html.RenderAction