.net mvc HtmlHelper扩展使用
如果是你是从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>©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扩展使用的更多相关文章
- MVC HtmlHelper扩展——实现分页功能
		
MVC HtmlHelper扩展类(PagingHelper) using System; using System.Collections.Generic; using System.Collect ...
 - ASP .NET MVC  HtmlHelper扩展——简化“列表控件”的绑定
		
在众多表单元素中,有一类<select>元素用于绑定一组预定义列表.传统的ASP.NET Web Form中,它对应着一组重要的控件类型,即ListControl,我们经常用到DropDo ...
 - [转]ASP.NET MVC HtmlHelper扩展之Calendar日期时间选择
		
本文转自:http://blog.bossma.cn/asp_net_mvc/asp-net-mvc-htmlhelper-calendar-datetime-select/ 这里我们扩展HtmlHe ...
 - 扩展ASP.NET MVC HtmlHelper类
		
在这篇帖子中我会使用一个示例演示扩展ASP.NET MVC HtmlHelper类,让它们可以在你的MVC视图中工作.这个示例中我会提供一个简单的方案生成Html表格. HtmlHelper类 Htm ...
 - MVC 用扩展方法执行自定义视图,替代 UIHint
		
MVC 用扩展方法执行自定义视图,替代 UIHint 项目中用了 Bootstrap , 这样就不用写太多的CSS了,省去很多事情.但是这个业务系统需要输入的地方很多,每个表都有100多个字段,每个页 ...
 - MVC页面扩展方法 单例模式
		
MVC页面扩展方法 单例模式 /// <summary> /// 创建一个Config内容对象 /// </summary> ...
 - Asp.Net Mvc 自定义扩展
		
目录: 自定义模型IModelBinder 自定义模型验证 自定义视图引擎 自定义Html辅助方法 自定义Razor辅助方法 自定义Ajax辅助方法 自定义控制器扩展 自定义过滤器 自定义Action ...
 - HtmlHelper扩展
		
扩展 HtmlHelper类 public static class MyHtmlHelper { //扩展方法 //静态类,静态方法,this关键字 //调用方法<%=Html.MyLabel ...
 - ASP.NET MVC HtmlHelper用法集锦
		
ASP.NET MVC HtmlHelper用法集锦 在写一个编辑数据的页面时,我们通常会写如下代码 1:<inputtype="text"value='<%=View ...
 
随机推荐
- 数据类型演示DataTypeDemo
			
/***数据类型演示*/public class DataTypeDemo{ public static void main(String[] args){ //直接赋予的值,称为字面量 //by ...
 - C#基础(WinForm窗体的单例模式,避免窗体被实例化多次)
			
在MDI窗体中使用单例模式可以有效的避免同个窗体被实例化多次 [csharp] view plain copy //==============字窗体的修改================ // ...
 - Csharp日常笔记
			
1. 1.退出程序 this.Close(); //方法退关闭当前窗口. Application.Exit(); //方法退出整 ...
 - Sqlmap基础(一)
			
(1)选项:-r REQUESTFILE Load HTTP request from a file (2)选项:--current-db Retrieve DBMS curr ...
 - 如何写科技文章的讨论discussion部分
			
众所周知,讨论部分是在结合自己的研究结果基础上,对整个文章的结论的提炼和升华.这一部分是整个论文的精,往往点睛作用. 同时,很多杂志要求结果和讨论分开,这也就更突出了写好讨论的重要性. 那么,我们应该 ...
 - AndroidJNI 调用JAVA(转)
			
转自:http://www.cnblogs.com/likwo/archive/2012/05/21/2512400.html 1. JNIEnv对象 对于本地函数 JNIEXPORT ...
 - 解决eclipse maven 项目重新下载包这个问题
			
问题:eclipse项目使用maven下载依赖包,但是有时候断网什么来着就不会自动下载了,挺蛋疼了. 所以,需要我们重新更新项目下载呢. 首先是要在maven的conf文件下setting.xml配置 ...
 - python 字符串换行的三种方式
			
if __name__ == '__main__': #第一种: 三个单引号 print ''' aaaaaaaaaaaaaaaa bbbbbbbbbbbbbb''' #第二种: 三个 ...
 - 信号量及PV原语
			
操作系统中进程互斥和同步的实现的一个最基本的方方是使用信号量和PV原语. 信号量S的物理意义:当S≥0的时候表示,某个资源可以使用的数量,当S<0的时候,其绝对值表示等待某个资源的进程数. 一般 ...
 - Base64 Encoding / Decoding in Node.js
			
Posted on April 20th, 2012 under Node.js Tags: ASCII, Buffer, Encoding, node.js, UTF So how do you e ...