1. 程式人生 > >第5章 表單和HTML輔助方法(HtmlHelper、輔助方法的使用、HTML輔助方法的工作原理、強型別輔助方法)

第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=love

2、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