ASP.NET MVC 重点教程一周年版 第九回 HtmlHelper 【转】
許多時(shí)候我們會(huì)遇到如下場景
在寫一個(gè)編輯數(shù)據(jù)的頁面時(shí),我們通常會(huì)寫如下代碼
1: <input type="text" value='<%=ViewData["title"] %>' name="title" />
由前篇我們所講的Helper演化,我們思考,對于這種代碼我們是不是也可以用一個(gè)Helper來自動(dòng)綁定數(shù)據(jù)呢
這當(dāng)然是可以的,ASP.NET MVC提供了一個(gè)HtmlHelper用于生成有數(shù)據(jù)綁定的Html標(biāo)簽。
1.ActionLink
其中最常用的就是Html.ActionLink
1.1基本的使用方式
1: <%=Html.ActionLink("這是一個(gè)連接", "Index", "Home")%>
在UrlRouting規(guī)則為默認(rèn)規(guī)則的情況下,它生成的HTML代碼為
1: <a href="/">這是一個(gè)連接</a>
ActionLink中的三個(gè)參數(shù)分別為
- 顯示的文字
- Action
- Controller
其中Controller可以省略,省略時(shí)指向同一Controller下的Action。
1.2ActionLink中QueryString與Html屬性設(shè)置
1: 帶有QueryString的寫法2: <%=Html.ActionLink("這是一個(gè)連接", "Index", "Home", new { page=1 },null)%>
3: <%=Html.ActionLink("這是一個(gè)連接", "Index", new { page=1 })%>
4: 有其它Html屬性的寫法5: <%=Html.ActionLink("這是一個(gè)連接", "Index", "Home", new { id="link1" })%>
6: <%=Html.ActionLink("這是一個(gè)連接", "Index",null, new { id="link1" })%>
7: QueryString與Html屬性同時(shí)存在8: <%=Html.ActionLink("這是一個(gè)連接", "Index", "Home", new { page = 1 }, new { id = "link1" })%>
9: <%=Html.ActionLink("這是一個(gè)連接", "Index" , new { page = 1 }, new { id = "link1" })%>
其生成結(jié)果為:
1: 帶有QueryString的寫法2: <a href="/?page=1">這是一個(gè)連接</a>
3: <a href="/?page=1">這是一個(gè)連接</a>
4: 有其它Html屬性的寫法5: <a href="/?Length=4" id="link1">這是一個(gè)連接</a>
6: <a href="/" id="link1">這是一個(gè)連接</a>
7: QueryString與Html屬性同時(shí)存在8: <a href="/?page=1" id="link1">這是一個(gè)連接</a>
9: <a href="/?page=1" id="link1">這是一個(gè)連接</a>
這樣就可以使用ActionLink生成近乎所有的地址連接了。
注意,如果連接中不涉及到action及controller就沒有必要使用ActionLink,而是直接寫HTML代碼就可以了,例如
1: <a href="#1">一章</a>
2: <a href="javascript:void(0)" onclick="delete();">刪除</a>
2.RouteLink
2.1與ActionLink
RouteLink與ActionLink相差無幾,只是它的地址是由Route生成拿上面的例子
1: <%=Html.ActionLink("這是一個(gè)連接", "Index", "Home")%>
來說,如果用RouteLink來寫就是
1: <%=Html.RouteLink("這是一個(gè)連接", new { controller="Home",action="Index"})%>
?
而帶上QueryString以及Html屬性的ActionLink
1: <%=Html.ActionLink("這是一個(gè)連接", "Index" , new { page = 1 }, new { id = "link1" })%>
就可以這樣來寫
1: <%=Html.RouteLink("這是一個(gè)連接", new { action = "index", page = 1 }, new { id="link1"})%>
?
其實(shí)就是用一個(gè)新建立的RouteValueDictionary的對象(new{}所實(shí)例化的對象將會(huì)等價(jià)轉(zhuǎn)換為RouteValueDictionary)來替原來的Action,Controller字符串的單獨(dú)指定。
2.2RouteLink使用Route規(guī)則
除了這些協(xié)同的用法,RouteLink還支持使用Route規(guī)則名來創(chuàng)建連接
例如我們在Global.asax文件中添加一個(gè)Route規(guī)則
1: routes.MapRoute(2: "about",//這是規(guī)則名
3: "about",//url
4: new {controller = "Home", action = "about"}
5: ); 那么我們就可以使用這個(gè)Route規(guī)則
1: <%=Html.RouteLink("關(guān)于", "about", new { })%>
2: <%=Html.RouteLink("關(guān)于", "about", new { page = 1 })%>
3: <%=Html.RouteLink("關(guān)于", "about", new { page = 1 }, new { id = "link1" })%>
來生成如下的HTML:
1: <a href="/about">關(guān)于</a>
2: <a href="/about?page=1">關(guān)于</a>
3: <a href="/about?page=1" id="link1">關(guān)于</a>
?
3.表單
很多情況下是要生成表單元素的,正如文章開始所述,修改一個(gè)內(nèi)容的情況下,我們可能要將數(shù)據(jù)與表單綁定。
3.1生成Form
我們當(dāng)然可以使用純的Html代碼或UrlHelper來生成一個(gè)Form。
如
1: <form action="/home/index" method="post">
2: </form>
1: <form action="<%=Url.Action("Index","Home")%>" method="post">
2: </form>
但是因?yàn)槭窃贖TML的屬性中,所以還是難以維護(hù),幸好ASP.NET MVC為我們提供了一個(gè)Helper,我們可以通過以下兩種方式生成一個(gè)Form:
1: <%using(Html.BeginForm("index","home",FormMethod.Post)){%>
2: 表單內(nèi)容 3: <%} %>4: <%Html.BeginForm("index", "home", FormMethod.Post);//注意這里沒有=輸出%>
5: 表單內(nèi)容 6: <%Html.EndForm(); %> BeginForm方法類似于ActionLink的調(diào)用方式,所以ASP.NET MVC還提供了BeginRouteForm這種方法。
當(dāng)然這里我們也可以使用new{}來為form的action增加querystring或HTML屬性,方法與前面介紹的大同小異,參見方法列表即可。
?
3.2表單元素
ASP.NET MVC提供了多種表單元素的Helper。
其中包括:TextBox(類似input type=text,下面類似)、TextArea、DropDownList(select)、CheckBoxHidden、ListBox、Password、RadionButton。
注意:因?yàn)?lt;input type=”submit” />一般情況下是不會(huì)綁定數(shù)據(jù)的所以ASP.NET MVC并未提供此Helper(曾經(jīng)提供過在preview2之前)。
如果我們想提供一個(gè)input type=text 它的name為t1則以下代碼:
1: <%=Html.TextBox("t1") %>
3.3表單元素綁定
如果我們想要讓上文中的t1初始時(shí)就有一個(gè)值,比如 “重典”那么我們可以按以下方式
1: <%=Html.TextBox("t1","重典") %>
如果數(shù)據(jù)是從數(shù)據(jù)庫中讀取,即得到數(shù)據(jù)是從Action中獲取的,那么我們可以在Action中使用ViewData傳遞
Action:
1: ViewData["name"]="重典";
View:
1: <%=Html.TextBox("t1",ViewData["name"]) %>
?
以上方法看似簡單,其實(shí)ASP.NET MVC為我們提供了更為簡便的綁定方式---只要保證ViewData的Key與Helper所生成元素的name保持一致就可以自動(dòng)綁定:
Action:
1: ViewData["t1"]="重典";
View:
1: <%=Html.TextBox("t1") %>
?
?
這樣就可以自動(dòng)綁定了
3.4列表數(shù)據(jù)顯示與綁定
像TextBox這種值單一的數(shù)據(jù)比較容易,但是存在的數(shù)據(jù)比較多的DropDownList或ListBox應(yīng)該怎么綁定數(shù)據(jù)及初始化值呢,我們來看看下面的例子:
Action:
1: ViewData["sel1"] = new SelectList(
2: new[] {1, 2, 3} /*列表內(nèi)容可以是數(shù)組*/
3: , 3 /*默認(rèn)值,可以是從數(shù)據(jù)庫讀出的*/
4: ); View:
1: <%=Html.DropDownList("sel1")%>
這樣就可以將列表內(nèi)容、默認(rèn)值、以及表單元素三者綁定在一起了。
而我們的列表內(nèi)容并不是任何情況下都是數(shù)組的,大多情況下還是Key-Value對居多。
我們可以使用以下方式:
1: List<SelectListItem> list = new List<SelectListItem>
2: {3: new SelectListItem {Text = "重典", Value = "1"},
4: new SelectListItem {Text = "鄒健", Value = "2"},
5: };6: ViewData["sel1"] = new SelectList(
7: list /*列表內(nèi)容可以是數(shù)組*/
8: , "2" /*默認(rèn)值,可以是從數(shù)據(jù)庫讀出的*/
9: );
轉(zhuǎn)載于:https://www.cnblogs.com/cxd4321/archive/2009/09/25/1574267.html
總結(jié)
以上是生活随笔為你收集整理的ASP.NET MVC 重点教程一周年版 第九回 HtmlHelper 【转】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CPU i5多少钱?
- 下一篇: 前两天去A公司面试,面试管问的题目一下子