APS.NET MVC + EF (07)---表單和HTML輔助方法


在ASP.NET MVC中,可以借助HtmlHelper 對象來輸出頁面內容,提高開發效率。下面,我們將介紹一些常用的輔助方法。

7.1 HTML輔助方法

  1. BeginForm

    該輔助方法主要用來產生<form>標簽,可以通過using語法來使用。

//參數1:actionName 參數2:controllerName

@using(Html.BeginForm("About","Home")) {

<!-- 輸出表單元素 -->

}

使用Html.BeginForm輔助方法輸出的表單預設輸出的method屬性會是POST,如果想指定為GET的話,可以輸入第三個參數,如下。

@using(Html.BeginForm("Search","Home",FormMethod.Get))

{

}

如果想要用HTML表單實現文件上傳的功能,那么必須在輸出的<form>表單標簽加上一個enctype屬性,且內容必須設定為multipart/form-data,如下。

@using(Html.BeginForm("Upload","File",FormMethod.Post,new{enctype="multipart/form-data"}))

{

<!-- 文件域的寫法 -->

@Html.TextBox("File1","",new{type="file",size="25"})

}

     

  1. @Html.Lable(元素名稱,元素值,元素屬性)

    示例:

    @Html.Lable("GenreName","流行",new { @class="validation" })

    渲染之后代碼如下

    <label class="validation" for="GenreName">流行</label>

         

  2. @Html.TextBox("元素名稱",元素值,元素格式,元素屬性)

    示例:

    @Html.TextBox("title", "2.5",string.Format("{0:C}",2.5) new { @class = "validation" })

    渲染之后源碼如下

    <input class="validation" id="title" name="title" type="text" value="¥2.50" />

         

  3. @Html.TextArea(元素名稱,元素內容,元素屬性)

    示例:

    @Html.TextArea("text","hello <br/> world")

    渲染之后源碼如下

    <textarea cols="80" id="text" name="text" rows="10">hello &lt;br /&gt; world </textarea>

     

  1. @Html.Hidden (元素名稱,元素值)

    示例:

    @Html.Hidden("WizardStep","1")

    渲染之后源碼如下

    <input id="wizardStep" name="wizardStep" type="hidden" value="1" />

         

  2. @Html.Password(元素名稱",元素值,元素屬性)

    示例:

    @Html.Password("UserPassword")

    渲染之后源碼如下

    <input id="UserPassword" name="UserPassword" type="password" value="">

         

  3. @Html.RadioButton(元素名稱,元素值)

    示例:

    @Html.RadioButton("color","red")

    渲染之后源碼如下

    <input id="color" name="color" type="radio" value="red" />

         

  4. Html.CheckBox(元素名稱)

    示例:

    @Html.CheckBox("IsDiscounted")

    渲染之后源碼如下

    <input id="IsDiscounted" name="IsDiscounted" type="checkbox" value="true" />

    <input name="IsDiscounted" type="hidden" value="false" />

         

說明:Html輔助方法均提供了多個版本的方法重載。

     

7.2 強類型HTML輔助方法

在ASP.NET MVC中,每一個Html.***()輔助方法都有一個對應的Html.***For()方法,這些方法稱為強類型視圖輔助方法。強類型主要體現在該方法調用時,第一個參數是一個lambda表達式,用來來指定要渲染的模型屬性,lambda表達式的模型類型必須和為視圖指定的模型類型(使用@model指令)一致。用lambda表達式代替字符串還有許多其他好處,其中包括智能感知、編譯時檢查等。例如:

在視圖頂部聲明強類型視圖

@model BookShop.Models.Book

視圖部分:

@Html.TextBoxFor(m=m.Title)

     

7.3 渲染輔助方法

7.3.1 Html.ActionLink

ActionLink輔助方法能渲染一個超鏈接(錨標簽),渲染的鏈接指向另一個控制器操作。

例如:

@Html.ActionLink("Link Text", "AnotherAction")

這里假設采用默認路由,執行這段代碼將生成如下所示的HTML標記:

<a href = "/Home/AnotherAction">LinkText</a>

     

當需要一個指向不同控制器操作的鏈接時,可通過ActionLink方法的第三個參數來指定控制器名稱。例如:

@Html.ActionLink("Link Text", "Index", "ShoppingCart")

     

7.3.2 URL.Action

URL.Action與HTML的ActionLink輔助方法類似,但它不是以HTML標記的形式返回構建的URL,而是以字符串的形式返回這些URL。例如:

<span>

@Url.Action("Browse", "Store", new {genre = "Jazz"}, null)

</span>

生成Html標記如下:

<span>

/Store/Browse?genre=Jazz

</span>

     

7.4 使用HTML輔助方法載入分部視圖

7.4.1 為什么要使用分部視圖

在ASP.NET MVC中,我們經常會遇到一個功能被多個頁面反復使用的情況,如每一頁上都顯示股票行情、一個日歷控件顯示在多個頁面中、多個頁面都有登錄功能等等。這個時候我們可以用分部視圖來實現。(不同於之前講的的布局頁,使用布局頁,相應的功能在頁面中的位置、樣式是一致的,不夠靈活)

布局頁相當於"用戶控件"。

7.4.2 創建分部視圖

分部視圖通常都是放在"Views——Shared"文件夾中。創建分部視圖由兩種方式。

(1)右鍵"Views——Shared"文件夾添加分部視圖。

(2)右鍵"Views——Shared"文件夾添加視圖,在"添加視圖"對話框中勾選"創建為分部視圖"。如圖7-1所示。

 

圖7-1 創建分部視圖

也可以創建為強類型的分部視圖,新建的cshtml頁面是一個完全空白的頁面。

7.4.3 使用分部視圖

     

  1. 使用 Html.Partial 和 Html.RenderPartial

    partial輔助方法用於將部分視圖渲染成字符串。partial方法共有4個重載版本:

    public void Partial(string partialViewName)

    public void Partial(string partialViewName,object model)

    public void Partial(string partialViewNameViewDataDictionary viewData)

    public void Partial(string partialViewName,object model,ViewDataDictionary ViewData

    具有的使用方法如示例1所示。

    示例1

<!-- 分部視圖 MyVistor.cshtml -->

@model IEnumerable<Friends.Models.VisitorModel>

<dl class="pubListTitle">

<dt>最近來訪 <span></span></dt>

<dd><a href="#">&#8226;&#8226;&#8226;</a></dd>

</dl>

<ul class="recentVisitor">

@foreach (Friends.Models.VisitorModel v in Model)

{

<li>

<img src="@Url.Content("~/images/headers/" + v.HeaderImage)"

width="50" height="50" /><br />

<a href="#">@v.RealName</a><br />

@v.LastVisitTime.ToString("MMdd")

</li>

}

</ul>

<div class="clear10"></div>

     

<!-- index.cshtml 主視圖-->

@Html.Partial("MyVistor", ViewData["Visitors"]);

   

     

RenderPartial輔助方法與partial非常相似,但Renderpartial不是返回字符串,而是直接寫入響應輸出流。出於這個原因,必須把Renderpartial放入代碼塊中,而不能放在代碼表達式中。使用方式如下:

@{ Html.RenderPartial("MyVistor", ViewData["Visitors"])}

     

那么應該使 Partial 還是 RenderPartial 呢?一般情況下,因為Partial相對於RenderPartial來說更方便(不必使用花括號將調用封裝在代碼塊中),所以應該選擇Partial 。然而,RenderPartial擁有較好的性能,因為它是直接寫入響應流的,但這種性能優勢需要大量的使用(高的網站流量或在循環中重復調用)才能看出來。

  1. 使用 Html.Action 和 Html.RenderAction

    Action提供了更多的靈活性和重用性,可以通過動作方法返回結果展示分部視圖。如示例2所示。

    示例2

//動作方法定義

public ActionResult ListFriends(int? groupId)

{

//省略代碼

return PartialView("MyVistor", items)

}

<!-- index.cshtml 主視圖-->

@Html.Action("MyVistor", "Friend", new { userId = user.UserId, num = 6 })

   

在分部視圖的動作方法中,必須返回PartialView。

Action和RenderAction之間僅有的不同之處在於:RenderAction可以直接寫入響應流(這可以帶來微弱的效率增益)。

     

另一種用法:使用ChildActionOnly特性

7.5 使用下拉框列表

下拉框列表一直是使用頻率非常高的頁面元素,在ASP.NET MVC 中使用 Html.DropDownList()輔助方法實現。

DropDownList()方法的重載版本如下:

   

DropDownList(this HtmlHelper htmlHelper, string name,

IEnumerable<SelectListItem> selectList,

string optionLabel

object htmlAttributes);

參數說明:

  • name:窗體字段的名稱。
  • selectList: 下拉框選項集合。
  • optionLabel: 默認選項值。
  • htmlAttributes:Html特性。

7.5.1 靜態下拉框

所謂靜態下拉框,就是指下拉框的選項為固定值。使用方法如示例3所示。

示例3

@{

var items=new List<SelectListItem>();

items.Add(new SelectListItem(){ Text="北京", Value="1" Selected=true});

items.Add(new SelectListItem(){ Text="天津", Value="2"});

items.Add(new SelectListItem(){ Text="上海", Value="3"});

items.Add(new SelectListItem(){ Text="重慶", Value="4"});

}

@Html.DropDownList("area",items,"請選擇",new {@class="myClass",

style = "width: 250px;"})

   

7.5.2 數據綁定

DropDownList的選項數據也可以借助SelectList對象從服務器的集合中獲取。SelectList的構造函數定義如下。

public SelectList(IEnumerable items, string dataValueField,

string dataTextField, object selectedValue);

   

使用方法如示例4所示。

示例4

//控制器代碼

List<City> cities= db.Citys;

SelectList list=new SelectList(cities,"Id","Name",cities[0].Id);

ViewBag.Cities=list;

return View();

   

<!-- 視圖中代碼 -->

@Html.DropDownList("area",(SelectList)ViewBag.Cities,"請選擇")

  

和其它輔助方法一樣,ASP.NET MVC也提供了對應的強類型輔助方法DropDownListFor( )方法。如下所示。

@Html.DropDownListFor(model => model.Id, (SelectList)ViewBag.Cities,"請選擇" })

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM