如果是你是从webform开始接触.net,你应该记得webform开发中,存在自定义控件这东西,它使得我们开发起来十分方便,如今mvc大势所趋,其实在mvc开发时,也存在自定义控件这么个东西,那就是HtmlHelper扩展,如果你们已经使用过Razor,那你们基本都用过:@Html.BeginForm(),@Html.DropDownList()等基本的控件,但是这些控件肯定无法满足我们的需求,所以我们需要自定义一些扩展,我这写了一些扩展:

 public static class HtmlHelperExtensions
{
public static MvcHtmlString ConvertToEnumDesc(this HtmlHelper helper, object enumValue)
{
return new MvcHtmlString(EnumDescription.GetFieldText(enumValue));
} public static MvcHtmlString ConvertTimestampToDateString(this HtmlHelper helper, long timestamp, string DateFormat = "yyyy-MM-dd HH:mm:ss")
{
DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(, , ));
long lTime = timestamp * ;
TimeSpan toNow = new TimeSpan(lTime); return new MvcHtmlString(dtStart.Add(toNow).ToString(DateFormat));
} public static MvcHtmlString NewMenuLink(this HtmlHelper helper, string linkText, string actionName,
string controllerName, object routeValues = null)
{
string currentAction = helper.ViewContext.RouteData.GetRequiredString("action");
string currentController = helper.ViewContext.RouteData.GetRequiredString("controller"); //modified this to work whenever a view of the controller is selected
//if (actionName == currentAction && controllerName == currentController) //var strLink = helper.ActionLink(linkText, actionName, controllerName, routeValues, null); var result = new TagBuilder("a");
var url = UrlHelper.GenerateUrl(null, actionName, controllerName, new RouteValueDictionary(routeValues), helper.RouteCollection,
helper.ViewContext.RequestContext, true);
result.Attributes.Add("href", url);
result.InnerHtml = "<i class=\"fa fa-file-o\"></i>" + linkText; var strResult = "";
if (controllerName.ToLower() == currentController.ToLower() && actionName.ToLower() == currentAction.ToLower())
{
strResult = "<li class=\"active\">" + result.ToString() + "</li>";
}
else
{
strResult = "<li>" + result.ToString() + "</li>";
}
return new MvcHtmlString(strResult);
} public static MvcHtmlString MenuLink(this HtmlHelper helper, string linkText, string actionName,
string controllerName, object routeValues = null)
{
string currentAction = helper.ViewContext.RouteData.GetRequiredString("action");
string currentController = helper.ViewContext.RouteData.GetRequiredString("controller"); //modified this to work whenever a view of the controller is selected
//if (actionName == currentAction && controllerName == currentController) var strLink = helper.ActionLink(linkText, actionName, controllerName, routeValues, null); var strResult = "";
if (controllerName.ToLower() == currentController.ToLower() && actionName.ToLower() == currentAction.ToLower())
{
strResult = "<li class=\"active\">" + strLink.ToString() + "</li>";
}
else
{
strResult = "<li>" + strLink.ToString() + "</li>";
}
return new MvcHtmlString(strResult);
}
}

那么问题就来了,这些扩展如何来使用?

 <div class="container-fluid">
<div class="row-fluid">
<div class="span2">
<div class="well sidebar-nav">
<ul class="nav nav-list">
@Html.MenuLink("站点配置", "Index", "Sites")
@Html.MenuLink("添加站点", "Add", "Sites")
@Html.MenuLink("用户属性配置", "ServiceAttributeList", "Sites")
@Html.MenuLink("通行证配置", "PassportServerConfig", "Sites")
</ul>
</div>
<!--/.well -->
</div>
<!--/span-->
<div class="span10">
@RenderBody()
</div>
<!--/span-->
</div>
<!--/row--> <hr> <footer>
<p>&copy;xxxxx</p>
</footer> </div>

但是在引用的时候有一个地方是要注意一下的,那就是引用问题,在view端目前是引用不了@Html.MenuLink的,我们需要再引用的页面@using Namespace;

我个人是不喜欢这么处理的,所以用另外一种方法来引用,在Views目录下有个web.config文件

 <system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Optimization"/>
<add namespace="System.Web.Routing" />
<add namespace="Kendo.Mvc.UI" />
</namespaces>
</pages>
</system.web.webPages.razor>

.net mvc HtmlHelper扩展使用的更多相关文章

  1. MVC HtmlHelper扩展——实现分页功能

    MVC HtmlHelper扩展类(PagingHelper) using System; using System.Collections.Generic; using System.Collect ...

  2. ASP .NET MVC HtmlHelper扩展——简化“列表控件”的绑定

    在众多表单元素中,有一类<select>元素用于绑定一组预定义列表.传统的ASP.NET Web Form中,它对应着一组重要的控件类型,即ListControl,我们经常用到DropDo ...

  3. [转]ASP.NET MVC HtmlHelper扩展之Calendar日期时间选择

    本文转自:http://blog.bossma.cn/asp_net_mvc/asp-net-mvc-htmlhelper-calendar-datetime-select/ 这里我们扩展HtmlHe ...

  4. 扩展ASP.NET MVC HtmlHelper类

    在这篇帖子中我会使用一个示例演示扩展ASP.NET MVC HtmlHelper类,让它们可以在你的MVC视图中工作.这个示例中我会提供一个简单的方案生成Html表格. HtmlHelper类 Htm ...

  5. MVC 用扩展方法执行自定义视图,替代 UIHint

    MVC 用扩展方法执行自定义视图,替代 UIHint 项目中用了 Bootstrap , 这样就不用写太多的CSS了,省去很多事情.但是这个业务系统需要输入的地方很多,每个表都有100多个字段,每个页 ...

  6. MVC页面扩展方法 单例模式

    MVC页面扩展方法    单例模式    /// <summary>         /// 创建一个Config内容对象         /// </summary>     ...

  7. Asp.Net Mvc 自定义扩展

    目录: 自定义模型IModelBinder 自定义模型验证 自定义视图引擎 自定义Html辅助方法 自定义Razor辅助方法 自定义Ajax辅助方法 自定义控制器扩展 自定义过滤器 自定义Action ...

  8. HtmlHelper扩展

    扩展 HtmlHelper类 public static class MyHtmlHelper { //扩展方法 //静态类,静态方法,this关键字 //调用方法<%=Html.MyLabel ...

  9. ASP.NET MVC HtmlHelper用法集锦

    ASP.NET MVC HtmlHelper用法集锦 在写一个编辑数据的页面时,我们通常会写如下代码 1:<inputtype="text"value='<%=View ...

随机推荐

  1. PCB板的价格是怎么算出来的?

    Part 1 :影响一块PCB板价格的各种因素 PCB的价格是很多采购者一直很困惑的事情,很多人在线下单时也会疑问这些价格是怎么算出来的,下面我们就一起谈论一下PCB价格的组成因素. 1.PCB所用材 ...

  2. Unigui有用的网址

    http://www.cnblogs.com/ChinaEHR/tag/Delphi/

  3. 【Spring】Redis的两个典型应用场景--good

    原创 BOOT Redis简介 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结构,例如hashes, lists, sets等,同时支持数据持久化. ...

  4. hdu 1176 免费馅饼(nyist 613)

    http://acm.hdu.edu.cn/showproblem.php?pid=1176 dp[i][j]:表示第i秒接j位置的馅饼的最大值. 三种状态: dp[i][j]=max(dp[i-1] ...

  5. Java基本类型

    转自http://myeyeofjava.iteye.com/blog/1738143 1G=1024M=1024K=1024BYTE=8BIT 1 byte = 1字节  = 8bit 可表达 2的 ...

  6. uva12230Crossing Rivers

    数学期望. 过每条河的时间的可能在[L/v,3*L/v]间均匀分布,数学期望为2*L/v. 然后在加上在陆上走的时间. #include<cstdio> #include<algor ...

  7. LA 3295 (计数 容斥原理) Counting Triangles

    如果用容斥原理递推的办法,这道题确实和LA 3720 Highway很像. 看到大神们写的博客,什么乱搞啊,随便统计一下,这真的让小白很为难,于是我决定用比较严格的语言来写这篇题解. 整体思路很简单: ...

  8. Jqgrid入门-显示基本的表格(一)

    首先对Jqgrid网格插件做个简要的说明.在众多的表格插件中,Jqgrid的特点是非常鲜明的.         特点如下: 完整的表格呈现与运算功能,包含换页.栏位排序.grouping.新增.修改及 ...

  9. IIS Server is too busy 解决方法(IIS6)

    Server is too busy意思是服务器繁忙,资源不够用 为什么会出现这个问题呢? 因为服务器的配置不同,所能承受的压力不同. 而服务器默认对链接数,线程数等有设置,但这个设置太小,基本不够用 ...

  10. Repeater 控件 当数据源没有数据的时候显示 暂无数据 的两种方式

    第一种:现在前台给Repeater控件外面的div加一个runat=”server”  然后在cs后台判断数据源是否为空, 是的话就修改这个前台div的InnerText或者是InnerHtml 即可 ...