.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 ...
随机推荐
- Android:设计之屏幕适配
据统计目前市场Android手机的分辨率有是10余种,分辨率如此广泛使得我们在处理分辨率适应方便遇到不少难题,本文就此难点记录设计与实际布局中的解决技巧. 以320x480为蓝本设计布局 因为Andr ...
- Android SDK +Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建
Android SDK+Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建 这几天一直在研究 Android SDK C/C++平台的搭建,尽管以前有成功在Windows ...
- NLP基本任务-nltk_data文本分割
将文本分割为句子 nltk.sent_tokenize(text,language) text:需要分割的文本 language:语言种类 czech捷克语 danish丹麦语 dutch荷兰语 en ...
- ProgressBar 示例及自定义样式
在layout中使用ProgerssBar,其中使用了自定义的样式 <ProgressBar android:id="@+id/footer_refresh_prgs" st ...
- C#中控件的CheckState和Checked属性区别?
Checked 和CheckState都是检查控件选中状态,都能判断是否选中控件. 只是Checked 通过布尔判断(true & false): CheckState 通过枚举判断. che ...
- mac 下php运行bug
如下所说bug在window下没有,在mac下存在. mac下的php报如下错误: fopen("data.json") Error: failed to open stream: ...
- Android公共库(缓存 下拉ListView 下载管理Pro 静默安装 root运行 Java公共类)
介绍总结的一些android公共库,包含缓存(图片缓存.预取缓存).公共View(下拉及底部加载更多ListView.底部加载更多ScrollView.滑动一页Gallery).及Android常用工 ...
- hdu 4970 Killing Monsters (思维 暴力)
题目链接 题意: 有n座塔,每座塔的攻击范围为[l,r],攻击力为d,有k个怪兽从这些塔前面经过,第i只怪兽初始的生命力为hp,出现的位置为x,终点为第n个格子.问最后有多少只怪兽还活着. 分析: 这 ...
- fil_space_create
/*******************************************************************//** Creates a space memory obje ...
- bzoj3261: 最大异或和
可持久化trie.又是%%%Xs酱... #include<cstdio> #include<cstring> #include<iostream> #includ ...