MVC 自定义Htmlhelper扩展
在MVC中,我们不仅可以使用它原来的方法,我们还可以自定义,这不不仅加大了我们开发的效率,同时使界面更简洁。
具体什么是扩展方法,你可以这样理解,必须是静态且在形参中第一个参数是以this开头,大概先这样理解下哈。接下来,我们就可以实现了。
首先,我们定义一个名为HtmlExtensions的类,在MVCWeb下。(如果你在别的类库下,当前类库必须引入两个System.Web.WebPages和System.Web.Mvc,不然无法使用TagBuilder此类(自定义标签啊等)若没有找到此Dll,可以在web下的bin文件夹里找)
这里为了方便,以防我每次引入命名空间,我把此类下的命名空间改为 System.Web.Mvc.Html
MvcHtmlString.Create()此方法类似于@Html.Raw();
MvcHtmlString.Create()只能解析字符串,而@Html.Raw()能解析任何对象。
代码如下:
using System.Linq.Expressions;
using System.Web.Mvc;
using System.Web.WebPages.Html;
namespace System.Web.Mvc.Html
{
//HtmlHelper Extensions
public static class HtmlExtensions
{
#region DisplayDescription + static MvcHtmlString DisplayDescription(this HtmlHelper htmlHelper, string name)
//在这里,我们传入一个字符串进去,返回解析后的html文本,在页面我们可以这样使用 @Html.DisplayDescription("请输入用户名")
/// <summary>
/// DisplayDescription
/// </summary>
/// <param name="htmlHelper">HtmlHelper</param>
/// <param name="name">name</param>
/// <returns></returns>
public static MvcHtmlString DisplayDescription(this HtmlHelper htmlHelper, string name)
{
ModelMetadata modelMetadata = ModelMetadata.FromStringExpression(name, htmlHelper.ViewData);
return MvcHtmlString.Create(modelMetadata.Description); }
#endregion #region DisplayDescriptionFor + static MvcHtmlString DisplayDescriptionFor<TModel, TResult>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TResult>> expression)
//在这里,我们Lambda进去,返回解析后的html文本,在页面我们可以这样使用 @Html.DisplayDescriptionFor(model=>model.属性名)
/// <summary>
/// DisplayDescriptionFor
/// </summary>
/// <typeparam name="TModel">Model</typeparam>
/// <typeparam name="TResult">Result</typeparam>
/// <param name="htmlHelper">Htmlper</param>
/// <param name="expression">lanmda</param>
/// <returns></returns>
public static MvcHtmlString DisplayDescriptionFor<TModel, TResult>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TResult>> expression)
{ //注意FromLambdaExpression这里跟上面是不一样的,这里是通过lambda来创建的
ModelMetadata modelMetadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
return MvcHtmlString.Create(modelMetadata.Description);
}
#endregion #region Submit +static MvcHtmlString DisplaySubmit(this HtmlHelper helper, string value)
////在这里,我们Lambda进去,返回解析后的html标签,在页面我们可以这样使用 @Html.Submit("提交")
/// <summary>
/// Submit
/// </summary>
/// <param name="helper">Htmlper</param>
/// <param name="value">Input Value</param>
/// <returns></returns>
public static MvcHtmlString Submit(this HtmlHelper helper, string value)
{
var builder = new TagBuilder("input");//创建一个input标签
builder.MergeAttribute("type", "submit");//创建其标签属性
builder.MergeAttribute("value", value);//创建其标签属性
builder.ToString(TagRenderMode.SelfClosing);//TagRenderMode.SelfClosing标识生成自闭合的标签,例如 <br />
return MvcHtmlString.Create(builder.ToString());//builder.ToString()相当于输出,MvcHtmlString.Create()解析
}
#endregion }
}
以上只是一点点扩展,余下得,需自行测试,生成更多。
MVC 自定义Htmlhelper扩展的更多相关文章
- ASP.NET MVC Razor HtmlHelper扩展和自定义控件
先看示例代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using S ...
- asp.net MVC添加HtmlHelper扩展示例和用法
一.先创建一个HtmlHelper的扩展类,代码: using System; using System.Collections.Generic; using System.Linq; using S ...
- MVC采用HtmlHelper扩展和Filter封装验证码的功能
最近因为有个项目除了登录还有其他很多地方需要用到验证码的功能,所以想到了采用HtmlHelper和ActionFilter封装一个验证码的功能,以便能够重复调用.封装好以后调用很方便,只需在View中 ...
- MVC 自定义HtmlHelper帮助类型之分页
方法一: 在项目中增加App_Code文件夹,新增一个MyHtmlper.cshtml视图文件 写入代码: @helper Pagger(int pageIndex, int pageCount) { ...
- 自定义HtmlHelper扩展方法
核心:通过TagBuilder类实现Html元素的创建 TagBuilder: 前台调用: @Html.Messger("tag","span-tag", @V ...
- ASP.NET MVC 之自定义HtmlHelper
前言 HtmlHelper方法为我们提供很多html标签,只需在页面调用就行了,但是微软并没有把所有的html标签都对应有了扩展方法,需要我们重新自定义HtmlHelper,来满足我们需要. 方法 如 ...
- .net mvc HtmlHelper扩展使用
如果是你是从webform开始接触.net,你应该记得webform开发中,存在自定义控件这东西,它使得我们开发起来十分方便,如今mvc大势所趋,其实在mvc开发时,也存在自定义控件这么个东西,那就是 ...
- 在 ASP.NET MVC 中创建自定义 HtmlHelper
在ASP.NET MVC应用程序的开发中,我们常碰到类似Html.Label或Html.TextBox这样的代码,它将在网页上产生一个label或input标记.这些HtmlHelper的扩展方法有些 ...
- Asp.Net Mvc 自定义扩展
目录: 自定义模型IModelBinder 自定义模型验证 自定义视图引擎 自定义Html辅助方法 自定义Razor辅助方法 自定义Ajax辅助方法 自定义控制器扩展 自定义过滤器 自定义Action ...
随机推荐
- 自己动手写一个简单的MVC框架(第一版)
一.MVC概念回顾 路由(Route).控制器(Controller).行为(Action).模型(Model).视图(View) 用一句简单地话来描述以上关键点: 路由(Route)就相当于一个公司 ...
- JavaScript面试时候的坑洼沟洄——数据类型
前些日子写了篇关于最近找工作的一些感受的博客 找工作的一些感悟--前端小菜的成长,没想到得到了很多园友的共鸣,得到了很多鼓励,也有园友希望我分享一些笔试.面试的经验.我觉得分享一些笔试题没太多价值,对 ...
- Azure PowerShell (10) 使用PowerShell导出订阅下所有的Azure VM和Cloud Service的高可用情况
<Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China服务. 该脚本下载地址在http://files.cnblogs.co ...
- 《Entity Framework 6 Recipes》翻译系列 (5) -----第二章 实体数据建模基础之有载荷和无载荷的多对多关系建模
2-3 无载荷(with NO Payload)的多对多关系建模 问题 在数据库中,存在通过一张链接表来关联两张表的情况.链接表仅包含连接两张表形成多对多关系的外键,你需要把这两张多对多关系的表导入到 ...
- 页面静态化技术Freemarker技术的介绍及使用实例.
一.FreeMarker简介 1.动态网页和静态网页差异 在进入主题之前我先介绍一下什么是动态网页,动态网页是指跟静态网页相对应的一种网页编程技术.静态网页,随着HTML代码的生成,页面的内容和显示效 ...
- CocoaPods pod 安装、更新慢解决方法
使用CocoaPods来添加第三方类库,无论是执行pod install还是pod update都卡在了Analyzing dependencies不动了,令人甚是DT. 每一次都忘记现在自己记录一下 ...
- SQLServer比较两条数据是否相同
SQLServer比较两条数据是否相同 直接比较可能会一个一个字段的比较,也可以将多个字段拼成一个串然后比较,这里有个hash值比较的方法,很好用 用法 将需要的比较的column放进去,逗号隔开,只 ...
- Trace Flag
Trace Flag能够影响Sql Server的行为,主要用于diagnose performance issue,官方解释是: Trace flags are used to temporaril ...
- 【.NET深呼吸】线程信号量(Semaphore)
Semaphore类可以控制某个资源允许访问的线程数,Semaphore有命名式的,也有不命名的:如果不考虑跨进程工作,一般在代码中使用不命名方式即可. 信号量有点类似于等待句柄,某个线程如果调用了W ...
- A Simple OpenGL Shader Example
A Simple OpenGL Shader Example eryar@163.com Abstract. OpenGL Shading Language, the high-level progr ...