ASP.NET MVC Extensions Methods
These are my extensions.
- Not display dropdownlist if the Select list is null
public static MvcHtmlString DropDownListNull(this HtmlHelper html, string Name, SelectList select, object htmlAttributes) { if (select == null) return MvcHtmlString.Empty; else return html.DropDownList(Name, select, htmlAttributes); }
- Transform Enum to SelectList
#region enum to list private static List<KeyValuePair<long, string>> FromEnum(this Type e) { List<KeyValuePair<long, string>> kvp = new List<KeyValuePair<long, string>>(); foreach (var s in Enum.GetValues(e)) { kvp.Add(new KeyValuePair<long, string>((int)s, s.ToString())); } return kvp; } public static SelectList ToSelectList(this Type enumObj) { return new SelectList(enumObj.FromEnum(), "Key", "Value"); } #endregion
- Transform Generic list into a SelectList
#region Generic List to SelectItem public static SelectList SelectFromList<TItem>(this List<TItem> values, Expression<Func<TItem, string>> key, Expression<Func<TItem, string>> value) { var Key = key.Compile(); var Value = value.Compile(); List<KeyValuePair<string, string>> kvp = new List<KeyValuePair<string, string>>(values.Count); values.ForEach(item => kvp.Add(new KeyValuePair<string, string>(Key.Invoke(item), Value.Invoke(item)))); return new SelectList(kvp, "Key", "Value"); } #endregion
- Display pager control
#region paged list control //after http://geekswithblogs.net/nuri/archive/2009/08/05/mvc-paged-list.aspx /// <summary> /// Shows a pager control - Creates a list of links that jump to each page /// </summary> /// <param name="page">The ViewPage instance this method executes on.</param> /// <param name="pagedList">A PagedList instance containing the data for the paged control</param> /// <param name="controllerName">Name of the controller.</param> /// <param name="actionName">Name of the action on the controller.</param> public static void ShowPagerControl(this ViewPage page, BasePagedListImplementation pagedList, string formatUrl) { HtmlTextWriter writer = new HtmlTextWriter(page.Response.Output); if (writer != null) { for (int pageNum = 1; pageNum <= pagedList.PageCount; pageNum++) { bool samepage=(pageNum == pagedList.PageNumber); if (!samepage) { writer.AddAttribute(HtmlTextWriterAttribute.Href,string.Format(formatUrl, pageNum)); writer.AddAttribute(HtmlTextWriterAttribute.Alt, "Page " + pageNum); writer.RenderBeginTag(HtmlTextWriterTag.A); } writer.AddAttribute(HtmlTextWriterAttribute.Class, pageNum == pagedList.PageNumber ? "pageLinkCurrent" : "pageLink"); writer.RenderBeginTag(HtmlTextWriterTag.Span); writer.Write(pageNum); writer.RenderEndTag(); if (!samepage) { writer.RenderEndTag(); } writer.Write(" "); } writer.Write("("); writer.Write(pagedList.TotalItemCount); writer.Write(" items in all)"); } } #endregion
Other extensions available that are good :
- http://blog.wekeroad.com/blog/asp-net-mvc-list-helper-extension-method/
- http://www.hanselman.com/blog/ASPNETMVCSessionAtMix08TDDAndMvcMockHelpers.aspx
- http://helios.ca/2009/09/21/asp-net-mvc-extension-methods-of-urlhelper/
- http://blog.donnfelker.com/2010/02/25/asp-net-mvc-tempdata-extension-methods/
- http://inq.me/post/ASPNet-MVC-Extension-method-to-create-a-Security-Aware-HtmlActionLink.aspx
If you know more, please tell me