ASP.NET MVC 之路(一)---------HtmlHelper 擴展控件

前言

由於Asp.Net MVC 不提倡用服務器控件,因此就提供了HtmlHelper幫助類,裡面提供了一些通常用的控件,以及用於輸入驗証的幫助方法。如:

Html.BeginForm(),Html.ActionLink(),Html.CheckBox(),Html.RadioButton(),Html.Password()等

但是由於不每些特殊應用,這些控件還遠遠不夠。下面是擴展的幾個Helper。

點滴

1.RadioButton與Label的結合--->RadioLabel() 代碼如下:

#region 擴展Radiobutton 帶有增加屬性
        /// <summary>
        /// 擴展Radiobutton
        /// </summary>
        /// <param name="helper">HtmlHelper</param>
        /// <param name="id">radio id</param>
        /// <param name="name">radio name</param>

        /// <param name="value">radio value</param>
        /// <param name="text">labe text</param>
        /// <param name="htmlAttribute">radio attr</param>
        /// <returns>string</returns>
        public static string RadioLabel(this HtmlHelper helper, string id, string name,string value,string text, object htmlAttribute)
        {
            var redio = "";
            var buliderRDO = new TagBuilder("input");
            buliderRDO.Attributes.Add("type", "radio");
            buliderRDO.GenerateId(id);
            buliderRDO.Attributes.Add("value", value);
            buliderRDO.Attributes.Add("name", name);
            buliderRDO.MergeAttributes(new RouteValueDictionary(htmlAttribute));
            redio += buliderRDO.ToString(TagRenderMode.SelfClosing);

            var buliderLabel = new TagBuilder("label");
            buliderLabel.Attributes.Add("for", id);
            buliderLabel.InnerHtml = text;
            redio += buliderLabel.ToString(TagRenderMode.Normal);

            return redio;
        }
        #endregion

2.CheckBox與Label 控件的結合 CheckBoxLabel()代碼 如下:

#region 擴展checkbox
        /// <summary>
        /// 擴展checkbox
        /// </summary>
        /// <param name="helper">HtmlHelper</param>
        /// <param name="id">checkbox id</param>
        /// <param name="name">checkbox name</param>
        /// <param name="value">checkbox value</param>
        /// <param name="text">label text</param>
        /// <param name="htmlAttribute">checkbox attr</param>
        /// <returns></returns>
        public static string CheckBoxLabel(this HtmlHelper helper, string id, string name, string value, string text, object htmlAttribute)
        {
            string checkbox = "";
            var buliderCKB = new TagBuilder("input");
            buliderCKB.GenerateId(id);
            buliderCKB.Attributes.Add("type", "checkbox");
            buliderCKB.Attributes.Add("name", name);
            buliderCKB.MergeAttributes(new RouteValueDictionary(htmlAttribute));
            checkbox += buliderCKB.ToString(TagRenderMode.SelfClosing);

            var buliderLabel = new TagBuilder("label");
            buliderLabel.Attributes.Add("for", id);
            buliderLabel.InnerHtml = text;
            checkbox += buliderLabel.ToString(TagRenderMode.Normal);

            return checkbox;
        }
        #endregion

 上面兩個方法多可以自行重載 重載象如下:

 #region 擴展checkbox 無法添加屬性
        /// <summary>
        ///  擴展checkbox 無法添加屬性
        /// </summary>
        /// <param name="helper"></param>
        /// <param name="id">checkbox id</param>
        /// <param name="name">checkbox name</param>
        /// <param name="value">checkbox value</param>
        /// <param name="text">checkbox text</param>
        /// <returns></returns>
        public static string CheckBoxLabel(this HtmlHelper helper, string id, string name, string value, string text)
        {
            return CheckBoxLabel(helper, id, name, value, text,null);
        }
        #endregion

為什麼要寫radio和checkbox與Label 結合控件類 ,因為我們在asp.net太多地方用了radio和checkbox與Label 結合比喻說性別吧。

由於時間關系 我手頭上還有關與 分頁和Fckeditor的控件。如有興趣請留言,我會在最短時間回復與大家,與大家分享這份喜悅。

 

posted @ 2009-04-14 16:47  改變世界  阅读(1077)  评论(0编辑  收藏  举报