asp.net mvc(七)

來源:互聯網
上載者:User

       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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.