第5章 表單和HTML輔助方法(HtmlHelper、輔助方法的使用、HTML輔助方法的工作原理、強型別輔助方法)
一、表單的使用
1、表單
<form action="http://www.bing.com/search" monthod="get">
<input name="q" type="text"/>
<input type="submit" value="Search!"/>
</form>
產出地址:http://www.bing.com/search?q=love2、get方法還是Post方法
在Web應用程式中,Get請求用於讀操作,Post請求用於寫操作(通常包括更新、建立、刪除)二、HTML輔助方法
每一個Razor [ˈrezɚ] 檢視都繼承了它們基類的Html屬性
Html屬性的型別是System.Web.Mvc.HtmlHelper<T>,這裡的T是一個泛型型別引數,代表傳遞檢視的模型型別(預設是dynamic)
ASP.NET MVC 所有的HtmlHelper擴充套件方法都在名稱空間System.Web.Mvc.Html中(在web.Config)
@using (Html.BeginForm("Search", "Home", FormMethod.Get, new { target="_blank",@class="editForm",data_validatable=true})) { <input type="text" name="q"/> <input type="submit" value="Search"/> }
生成後Html
<form action="/Home/Search" class="editForm" data-validatable="True" method="get" target="_blank">
<input type="text" name="q"/>
<input type="submit" value="Search"/>
</form>
1、自動編碼
許多輔助方法都可以用來輸出模型值。所有這些輸出模型值的輔助方法都會在渲染之前,對值進行HTML編碼(避免XSS工具)。
如:TextArea輔助方法,輸出HTML,就進行編碼
@Html.TextArea("text","Hello <br/> World")
產生標記 <textarea cols="20" id="text" name="text" rows="2">
Hello <br/> World</textarea>
2、輔助方法的使用
BeginForm輔助方法的另一個過載版本:
@using (Html.BeginForm("Search", "Home", FormMethod.Get, new { target="_blank",@class="editForm",data_validatable=true}))
{}
生成後Html<form action="/Home/Search" class="editForm" data-validatable="True" method="get" target="_blank"></form>
(1)、其中new { target="_blank",@class="editForm",data_validatable=true}是htmlAttributes引數,它的型別是IDictionary<string, object>,輔助方法利用字典條目(物件的屬性名稱和屬性值)建立輔助方法生成元素的特性。
(2)、class屬性前加@,是應為class是c#語言中的一個保留關鍵字。
(3)、屬性名中帶下劃線生成html程式碼後轉成連字元(第8章介紹框架的Ajax特性時,將看到帶連字元的屬性名)
3、HTML輔助方法的工作原理
每一個Razor檢視都繼承了它們基類的Html屬性。Html屬性的型別是System.Web.Mvc.HtmlHelper<T>,這裡的T是一個泛型型別的引數,代表傳遞給檢視的模型型別(預設是dynamic)。這個屬性提供了一些可以在檢視中呼叫的例項方法,比如:EnableClientValidation 開啟關閉客戶端驗證.
4、設定專輯編輯表單
@using(Html.BeginForm())
{
@Html.ValidationSummary(excludePropertyErrors:true)
<input type="submit" value="Save"/>
}
Html.BeginForm() 向當前URL傳送一個HTTP POST請求。
ValidationSummary輔助方法用來顯示ModelState字典中所有驗證錯誤的無序列表(驗證摘要)。
(a)、如果值為true,只顯示ModelState中與模型本身有關的錯誤。如:ModelState.AddModelError("Title","標題不能為空") 與Title屬性關聯的錯誤
(b)、如果值為false,只顯示全部錯誤。如:ModelState.AddModelError("","標題不能為空")
5、新增輸入元素
StoreManager Edit.cshtml檢視程式碼的表單部分,並突出顯示了輸入輔助方法:
(1)、Html.TextBox和Html.TextArea
(2)、Html.Label
(3)、Html.DropDownList和Html.ListBox
(4)、Html.ValidationSummary
控制器中新增ModelState.AddModelError("Title","錯誤");
檢視中新增@Html.ValidationSummary("Title")
6、輔助方法、模型和檢視資料
輔助方法提供了對HTML細粒度控制的同時帶走了構建UI的乏味工作。
如:Html.TextBox和Html.DropDownList檢查ViewData物件以獲得要顯示的值(在ViewBag物件中的所有的值也可以通過ViewData得到)
情況一:
控制器:
public ActionResult Edit(int id)
{
ViewBag.Price = 10.0;
return View();
}
檢視:@Html.TextBox("Price")
產生結果:
<input id="Price" name="Price" type="text" value="10"/>
情況二:
控制器:
public ActionResult Edit(int id)
{
ViewBag.Album=new Album{Price=11}
return View();
}
檢視:@Html.TextBox("Album.Price")
產生結果:
<input id="Album.Price" name="Album.Price" type="text" value="11"/>
情況三:
如果想生成的值帶小數點,那麼 Price=11.0m
7、強型別輔助方法
使用強型別輔助方法時,只需要為其傳遞一個lambda表示式來指定要渲染的模型屬性。
表示式的模型型別必須和為檢視指定的模型型別(使用@model指令)一致。
對於強型別檢視,需要在檢視頂部輸入如下所示的程式碼:
@model MvcMusicStore.Models.Album
使用強型別輔助方法
@Html.LabelFor(model => model.GenreId, "GenreId", new { @class = "control-label col-md-2" })
注意:如果沒有提供足夠的資訊,使其能直接讀取模型的Title屬性來獲取需要的值。
8、輔助方法和模型元資料
如:@Html.Label("GenreId");
生成HTML標記
<label for="GenrdId">Genre</label>
文字Genre從哪裡來的?輔助方法執行時,從裝飾Album模型的DisplayName特性中獲取的資訊。
[DisplayName("Genre")]
public int GenreId{get;set;}
9、模板輔助方法
ASP.NET MVC中模板輔助方法利用元資料和模板構建HTML。元資料:包括關於模型值(它的名稱和型別)的資訊和(通過資料註解或自定義提供器新增的)模型元資料。
模型輔助方法:Html.Display和Html.Editor,以及分別與它們對應的強型別方法Html.DisplayFor和Html.EditorFor,還有它們對應的完整模型
Html.DisplayForModel和Html.EditorForModel。
例如:Html.TextBoxFor輔助方法為某個專輯的Title屬性生成如下Html標記
<input id="Title" name="Title" type="text" value="值"/>
也可以用EditorFor方法取而代之:@Html.EditorFor(m=>m.Title)
儘管兩種方法生成的同樣的HTML標記,但EditorFor方法是使用元資料(資料註釋)來改變生成的HTML.如下:在Title屬性新增一個DataType註釋。
[Required(ErrorMessage="不能為空")]
[StringLength(160)]
[DataType(DataType.MultilineText)]
public string Title{get;set;}
EditorFor輔助方法生成如下HTML標記:<textarea class="text-box multi-line" id="Title" name="Title">
內容
</textarea>
10、輔助方法和ModelState
儲存模型繫結期間監測到的所有驗證錯誤,以及使用者提交用來更新模型的元素值。三、其他輸入輔助方法
1、Html.Hidden 隱藏的輸入元素
@Html.Hidden("wizardStep","1")強型別版本:@Html.HiddenFor(m=>m.wizardStep)
生成如下所示的HTML標記:
<input id="wizardStep" name="wizardStep" type="hidden" value="1"/>
2、Html.Password 密碼欄位
@Html.Password("UserPassword")強型別版本:@Html.PasswordFor(m=>m.UserPassword)
3、Html.RadioButton
@Html.RadioButton("color","red")@Html.RadioButton("color","blue",true)
@Html.RadioButton("color","green")
生成的Html:
<input id="color" name="color" type="radio" value="red" />
<input checked="checked" id="color" name="color" type="radio" value="blue" />
<input id="color" name="color" type="radio" value="green" />
強型別對應方法:
@Html.RadioButtonFor(m=>m.GenreId,"1")
@Html.RadioButtonFor(m=>m.GenreId,"2")
@Html.RadioButtonFor(m=>m.GenreId,"3")
示例:給單選按鈕賦值
控制器:
SysUser model = new SysUser() { Sex="True"};
return View(model);
檢視:
@model SysUser
....
<div>
@Html.RadioButtonFor(model=>model.Sex,"True") 男
@Html.RadioButtonFor(model=>model.Sex,"False") 女
</div>
4、Html.CheckBox
@Html.CheckBox("IsDiscounted")唯一一個渲染兩個輸入元素的輔助方法。
<input id="IsDiscounted" name="IsDiscounted" type="checkbox" value="true" />
<input name="IsDiscounted" type="hidden" value="false" />
HTML規範中規定瀏覽器只提交選中的複選框的值。但是第二隱藏輸入元素就保證了IsDiscounted有一個值會被提交,即便使用者沒有選擇這個複選框。
示例:
//多選列表專案
Dictionary<string, string> dic = new Dictionary<string, string>();
dic.Add("1", "看書");
dic.Add("2", "運動");
ViewBag.dic = dic;
//預設選中項
ViewBag.checkBoxName = "1,2";
//獲得多選值:1,2
string str = Request.Params["checkBoxName"];
@foreach (var item in ViewBag.dic as Dictionary<string, string>)
{
<input type="checkbox" id="@item.Key" value="@item.Key"
name="checkBoxName"
@(Html.Raw((ViewBag.checkBoxName as string).Contains(item.Key) ? "checked=\"checked\"" : ""))/>@item.Value
}
四、渲染輔助方法
渲染輔助方法可在應用程式中生成指向其他資源的連結,也可以構建被稱為部分檢視的可重用UI片段。1、Html.ActionLink和Html.RouteLink
ActionLink渲染一個超連結。@Html.ActionLink("編輯","Edit","StoreManager",new {id=1},null)
生成:
<a href="/StoreManager/Edit/1">編輯</a>
Html.RouteLink只接收路由名稱
@Html.RouteLink("Link Text",new {action="Edit"})
2、URL輔助方法
(1)、Action 生成一個URL(不是連結)(2)、RouteUrl和RouteLink一樣
(3)、Content 輔助方法:相對路徑轉換成絕對路徑。
<script src="@Url.Content("~/***.js")" type="text/javascript"></scritp>
ASP.Net Mvc5使用的是Razor的第三版本,波浪號當出現在script、style和img元素的src特性時就會被自動解析.
<script src="~/***.js" type="text/javascript"></scritp>
3、Html.Partial和Html.RenderPartial
Partial輔助方法用於將部分檢視渲染成字串。4、Html.Action和Html.RenderAction
強烈推薦學習下載:MvcMusicStore原始碼學習
推薦閱讀:
相關推薦
第5章 表單和HTML輔助方法(HtmlHelper、輔助方法的使用、HTML輔助方法的工作原理、強型別輔助方法)
一、表單的使用1、表單<form action="http://www.bing.com/search" monthod="get"> <input name="q" type="text"/> <input type="submit" valu
HTML練習---第三章表單基礎
<html> <head> <title>百度一下,你就知道</title> </head> <body> <form method="get" action="新建文字文件1.html">
第5章 IP地址和子網劃分(2)_IP地址分類和NAT技術
sts 端口 主機數 int 2.3 主機ip 主機 和源 找到 3. IP地址的分類 (1)五類IP地址 (2)數軸表示法 4. 保留地址 (1)網段的地址:主機ID全0。如192.168.100.0/24,其中的192.168.10.0指的是網段。 (2)廣播地
第5章 IP地址和子網劃分(4)_超網合並網段
8.0 str ges 分析 需求 由於 子類 log spa 7. 超網合並網段 7.1 合並網段 (1)子網劃分是將一個網絡的主機位當網絡位,來劃分出多個子網。而多個網段合並成一個大網段,合並後的網段稱為超網。 (2)需求分析 某企業有一個網段,該網段有200臺計算
轉載--編寫高質量代碼:改善Java程序的151個建議(第5章:數組和集合___建議65~69)
ceo next foreach遍歷 通過 當前 prev 支持 變量 信息 閱讀目錄 建議65:避開基本類型數組轉換列表陷阱 建議66:asList方法產生的List的對象不可更改 建議67:不同的列表選擇不同的遍歷算法 建議68:頻繁插入和刪除時使用LinkLis
2017年10月24日 第三章 表單
selected button 單選框 選中 max eth 密碼框 網址 輸入文本 1.語法 <form method="get/post" action="數據向哪提交的地址" //表單內容 </form> 2.input 標簽常用屬性
C++ Primer Plus第六版編程練習---第5章 循環和關系表達式
AI ++ str eas prim OS ase AS stream 1、 #include <iostream> int main() { int startNum = 0; int endNum = 0; std::cout &
第 10 章 表單元素[上]
聚焦 ova 提示 inpu Enctype 接收 如果 光標 文本框 第 10 章 表單元素[上] 學習要點: 1.表單元素解析 本章主要探討 HTML5 中表單元素,表單元素用於獲取用戶的輸入數據。 一.表單元素解析 1.<form>定義
第 10 章 表單元素[中]
datetime 布爾 method 長度 pattern value 文件上傳 不同 單元 第 10 章 表單元素[中] 學習要點: 1.type 屬性解析 本章主要探討 HTML5 中表單中 input 元素的 type 屬性,根據不同的值來顯示不同的輸
第5章 選舉模式和ZooKeeper的叢集安裝 5-1 叢集的一些基本概念
xx就是我們的master,也就是我們的主節點。心跳機制,當有一個節點掛掉之後,整個叢集還是可以工作的。選舉模式,我們現在的master是正常執行的,但是在某些情況下它宕機了宕機了,那麼這個時候它這個叢集裡面就少了master,沒有master兩個slave需要去競爭。競爭完之後slave1把slave2給幹
第5章:座標和依賴/5.2 座標詳解
座標詳解 座標內容包括 groupid:必選 概念:通用用java包的形式表示(也就是.(點)表示法),內容一般是組織或者公司下的某個專案 例如:org.sonatype.nexus,org.sonatype 為非盈利組織
第5章:座標和依賴/5.9 最佳實踐/5.9.2 依賴屬性使用變數
依賴屬性使用變數 概念:用變數定義依賴的某一部分屬性,具體依賴中直接使用這個依賴即可,這樣做的好處是以後修改這個屬性時只需要修改這個變數即可 語法: 定義變數: <properties> <!—變數名--> <spring
第5章:座標和依賴/5.9 最佳實踐/5.9.1 排除依賴
排除依賴 概念:用於排除某個依賴,比如某個傳遞依賴版本不穩定時,用於排除這個傳遞性依賴;又比如某個傳遞性依賴存在版權問題,而不能放在中央倉庫,所以要進行排除 語法: <exclusions> <exclusion> <grou
第5章:函式和程式碼複用
註明:本系列課程專為全國計算機等級考試二級 Python 語言程式設計考試服務 目錄 考綱考點 知識導圖 1、函式的基本使用 函式的定義 函式的使用 2、函式的引數傳遞 可選引數傳遞 引數名稱傳遞 函式的返回值 3、變數的作用域 區域性變數 全
第5章 選舉模式和ZooKeeper的叢集安裝
選舉模式和ZooKeeper的叢集安裝 5-1 叢集的一些基本概念 5-2 單機偽分散式安裝zookeeper叢集 5-3 三臺物理機(虛擬機器)安裝zookeeper叢集 5-4 測試叢集角色以及選舉 5-1 叢集的一些基本概念
第三章 表單 3-4 表單控制元件
1、輸入框inputbootstrap通過對input標籤的type屬性進行識別,得到相應的格式,所以input標籤一定要對type進行指定。另外,還需通過form-control對輸入框進行規範統一,此外,可以用placeholder對框內內容進行初始化。 <form role="form"&
第三章 表單 3-1三大表單
基礎表單 水平表單 內聯表單 一、基礎表單類名“form-control”,實現一些設計上的定製效果。 1、寬度變成了100% 2、設定了一個淺灰色(#ccc)的邊框 3、具有4px的圓角 4、設定陰影效果,並且元素得到焦點之時,陰影和邊框效果會有所變化 5、設定了placeholder的顏色為#
高程3總結#第14章表單指令碼
表單指令碼 表單的基礎知識 HTMLFormElement有自己獨特的屬性和方法 acceptCharset,伺服器能夠處理的字符集,等價於HTML中的accept-charset特性 action,接受請求的URL,等價於HTML中的action特性 elem
第5章 概率分析和隨機演算法
練習 5.1-1 證明:因為在過程HIRE-ASSISTANT的第4行中,我們總能決定哪一個應聘者最佳,所以我們能比較任意兩個應聘者的好壞,則意味著我們知道應聘者排名的全部次序。 5.2-1 當面試的第一個應聘者是最好的應聘者時,你正好僱用一次。所以你正好僱用一次的概
第5章:座標和依賴/5.9 最佳實踐/5.9.3 依賴關係檢視
依賴關係檢視 檢視依賴列表:mvn dependency:list 概念:查詢某個專案所有的依賴關係,平級顯示 舉例: 不區分依賴關係,全部羅列出來 [INFO] org.springframework:spring-beans:jar:2.5.6:c