asp.net mvc和asp.net webfrom有個非常顯著的特點就是前者去掉了所有的伺服器控制項,原來拉控制項的好日子沒有了,取代的是用戶端控制項。我們可以有兩種方式建立這些用戶端控制項:
第一:在View中手寫html控制項。優點是非常直觀,缺點是增加代碼量。
第二:在View中利用System.Web.Mvc.Html下的HtmlHelper的完成大部分控制項的用戶端輸出。
HtmlHelper的功能:先看下它的源碼大致結構。
namespace System.Web.Mvc.Html
{
public static class FormExtensions//表單相關擴充方法,例如建立表單標籤等。
public static class InputExtensions//這裡包含了所有input,例如:text,button,readiobutton等等。
public static class LinkExtensions//連結相關方法
public class MvcForm : IDisposable//與用戶端控制項無關
public static class RenderPartialExtensions//這是輸出PartialView
public static class SelectExtensions//輸出下拉框
public static class TextAreaExtensions//輸出多行文字框
public static class ValidationExtensions//輸出相關表單元素驗證。
}
樣本:建立留言的View,有意思的是這裡在建立表單時,應用了using,和C#是的寫法一樣,但它的目的是不顯示調用Html.EndForm()方法,會在範圍最後自動添加了結束標籤。
<% using (Html.BeginForm())
{%>
<fieldset>
<p>
<label for="Title">
標題:</label>
<%= Html.TextBox("sTitle", Model.sTitle)%>
</p>
<p>
<label for="EventDate">
內容:</label>
<%=Html.TextBox("sContent", Model.sContent)%>
</p>
<p>
<input type="submit" onclick ="return check();" value="Save" />
</p>
</fieldset>
<% }
%>
System.Web.Mvc.Html下的HtmlHelper只能完成大部分html控制項的輸出,但像img標籤預設是沒有提供的,這裡需要我們自行來擴充下Helper,畢竟上面的眾多方法都是擴充出來的。
擴充Helper,我們可以利用TagBuilder,它能輸出所有標籤及屬性。TagBuilder提供下如下重要方法:
// Methods
public TagBuilder(string tagName);
public void AddCssClass(string value);//增加樣式
public void GenerateId(string name);//設定控制項ID
private string GetAttributesString();
public void MergeAttribute(string key, string value);//設定屬性值
public void MergeAttribute(string key, string value, bool replaceExisting);
public void MergeAttributes<TKey, TValue>(IDictionary<TKey, TValue> attributes);
public void MergeAttributes<TKey, TValue>(IDictionary<TKey, TValue> attributes, bool replaceExisting);
public void SetInnerText(string innerText);//設定顯示文本
public override string ToString();
public string ToString(TagRenderMode renderMode);//輸出控制項html
1:建立ImageHelper,利用TagBuilder部分方法最終輸出img標籤。
public static class ImageHelper
{
public static string Image(this HtmlHelper helper, string id, string url, string alternateText)
{
return Image(helper, id, url, alternateText, null);
}
public static string Image(this HtmlHelper helper, string id, string url, string alternateText, object
htmlAttributes)
{
// 建立IMG標籤
var builder = new TagBuilder("img");
// 增加ID屬性
builder.GenerateId(id);
// 增加屬性
builder.MergeAttribute("src", url);
builder.MergeAttribute("alt", alternateText);
builder.MergeAttributes(new RouteValueDictionary(htmlAttributes));
// 輸出完整的img標籤
return builder.ToString(TagRenderMode.SelfClosing);
}
}
2:頁面調用。
<%= Html.Image("img1", "http://a.lakequincy.com/img/633820582974214892.jpg", "這是一張圖片", new
{border="4px"})%>
總結:有了System.Web.Mvc.Html和TagBuilder,頁面控制項輸出已全部解決。
註:本文引用:http://www.asp.net/learn/mvc/tutorial-35-cs.aspx