Asp.net MVC4.0自定义Html辅助方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web;
using System.Web.Mvc; namespace MyEF.ExtentionHtmlHelper
{
public static class ImageHelper
{
//说明:因为C#3.0的扩充方法是一种特殊的静态方法,因此在开发Html辅助方法时必须声明为
//静态方法(static method)并放在一个静态的类别里面!此外自定义的Html方法还有一个重点,那就是从Html辅助方法里,回传的类型可以使简单的String字符串类型,也可以是System.Web.MvcHtmlString类别,差别在于,通过rasor输出的Html预设就会对所有输出的Html编码动作,所以如果回传string字符串类型,其输出的内容将会被Html编码后输出,如果你从Html辅助方法回传MvcHtmlString类型的话,如果内容包含标签数据,那么就会原封不动的输出Html标签,以我们的这个范例来说,必须回传MvcHtmlString类别,代码范例如下:
public static MvcHtmlString HtmlImg(this HtmlHelper helper, string url, string alternateText, string title)
{
return MvcHtmlString.Create(string.Format("<img src='{0} alt={1}' title='{2}' />", url, alternateText, title));
}
public static MvcHtmlString HtmlImg(this HtmlHelper helper, string linkUrl, string target, string imgUrl, string alterText, string title)
{
StringBuilder sb = new StringBuilder();
sb.Append("<a href=\"");
sb.Append(linkUrl);
sb.Append("\" target=\"");
sb.Append(target);
sb.Append("\">");
sb.Append("<img src=\"");
sb.Append(imgUrl);
sb.Append("\"");
sb.Append("\" alt=\"");
sb.Append(alterText);
sb.Append("\"");
sb.Append("\" title=\"");
sb.Append(title);
sb.Append("\" /></a>");
return MvcHtmlString.Create(sb.ToString());
}
}
}
这种利用StringBuilder组子串的方式没有任何弹性,ASP.NET MVC专门为了产生HTML标签的需求而设计了一个TagBuilder类别,能够以更物件化的方式产生HTML标签,接着来改写上述范例,以TagBuilder实例如下:
public static MvcHtmlString ImageLink(this HtmlHelper helper,string actionName,string imgUrl, string alternateText,object routeValues,object linkHtmlAttributes,object imageHtmlAttributes)
{
var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
var url = urlHelper.Action(actionName, routeValues);
//建立链接
var linkTagBuilder = new TagBuilder("a");
linkTagBuilder.MergeAttribute("href", url);
linkTagBuilder.MergeAttributes(new RouteValueDictionary(linkHtmlAttributes)); //建立图片
var imageTagBuilder = new TagBuilder("img");
imageTagBuilder.MergeAttribute("src", urlHelper.Content(imgUrl));
imageTagBuilder.MergeAttribute("alt",alternateText);
imageTagBuilder.MergeAttribute("title",alternateText);
imageTagBuilder.MergeAttributes(new ViewDataDictionary(imageHtmlAttributes)); //将图片加之连接中
linkTagBuilder.InnerHtml = imageTagBuilder.ToString(TagRenderMode.SelfClosing);
return MvcHtmlString.Create(linkTagBuilder.ToString());
}
/// <summary>
/// 工作类型HtmlHelper
/// </summary>
/// <param name="helper"></param>
/// <param name="natureWork"></param>
/// <returns></returns>
public static MvcHtmlString ExtendNatureWork(this HtmlHelper helper, string natureWork) {
var sb = new System.Text.StringBuilder();
var flag = natureWork.IsNull();
var arr = natureWork.IsNull() ? new string[1] : natureWork.Split(',');
foreach (var item in Macrosage.Utility.TypeHelper.ToDictionary(Macrosage.Utility.EnumHelper.JobType.实习).Where(x => x.Key != "3")) {
if (item.Key == "1") {
sb.AppendFormat("<span {0} data-id=\"{2}\"><em class=\"icon\"></em>{1}</span>", arr.Contains(item.Key) || flag ? "class='current'" : string.Empty, item.Value, item.Key);
}
else if (item.Key == "2") {
sb.AppendFormat("<span {0} data-id=\"{2}\"><em class=\"icon\"></em>{1}</span>", arr.Contains(item.Key) ? "class='current'" : string.Empty, item.Value, item.Key);
}
else {
sb.AppendFormat("<span {0} data-id=\"{2}\"><em class=\"icon\"></em>{1}</span>", arr.Contains(item.Key) ? "class='fix_noboder current'" : string.Empty, item.Value, item.Key);
}
}
return MvcHtmlString.Create(sb.ToString());
}
public static MvcHtmlString ExtendMy(this HtmlHelper helper, string welfare) {
var stringBulider = new StringBuilder();
var arr = welfare.IsNull() ? new string[1] : welfare.Split(",");
var data = EnumHelper.Welfare.Where(x => x.Key != "9");
foreach (var item in data) {
var index = data.ToList().IndexOf(item) + 1;
stringBulider.AppendFormat("<span class=\"{0} {2}\" data-id=\"{3}\"><em class=\"icon\"></em>{1}</span>", arr.Contains(item.Value) ? "current" : string.Empty, item.Value, index.Equals(data.Count()) ? "fix_noboder" : string.Empty, item.Key);
}
return MvcHtmlString.Create(stringBulider.ToString());
}
Asp.net MVC4.0自定义Html辅助方法的更多相关文章
- 利用CSS预处理技术实现项目换肤功能(less css + asp.net mvc4.0 bundle)
一.背景 在越来越重视用户体验的今天,换肤功能也慢慢被重视起来.一个web系统用户可以选择一个自己喜欢的系统主题,在用户眼里还是会多少加点分的.我们很开心的是easyui v1.3.4有自带defau ...
- Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据
Asp.Net MVC4.0 官方教程 入门指南之五--控制器访问模型数据 在这一节中,你将新创建一个新的 MoviesController类,并编写代码,实现获取影片数据和使用视图模板在浏览器中展现 ...
- Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图
Asp.Net MVC4.0 官方教程 入门指南之三--添加一个视图 在本节中,您需要修改HelloWorldController类,从而使用视图模板文件,干净优雅的封装生成返回到客户端浏览器HTML ...
- Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器
Asp.Net MVC4.0 官方教程 入门指南之二--添加一个控制器 MVC概念 MVC的含义是 “模型-视图-控制器”.MVC是一个架构良好并且易于测试和易于维护的开发模式.基于MVC模式的应用程 ...
- 主攻ASP.NET MVC4.0之重生:ASP.NET MVC使用JSONP
原文:主攻ASP.NET MVC4.0之重生:ASP.NET MVC使用JSONP 原文地址 http://www.codeguru.com/csharp/.net/net_asp/using-jso ...
- Asp.net MVC4.0(net4.5) 部署到window server 2003上的解决方案
Asp.net MVC4.0(net4.5) 部署到window server 2003上的解决方案 最近做了一个Web项目,也没多想就用了Asp.net MVC4.0 ,MVC4.0默认的目标fra ...
- SNF快速开发平台3.0之-界面个性化配置+10种皮肤+7种菜单-Asp.net+MVC4.0+WebAPI+EasyUI+Knockout
一.个性配置-首页:可以进行拖动保存配置,下次登录时就会按配置的进行加载 二.个人配置页面 7种菜单用户可自定义配置,和预览效果 10种皮肤自定义配置,和预览效果 皮肤和菜单可以随意组合-部分截图: ...
- 建筑材料系统 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发
框架介绍: 1.基于 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发 2.采用MVC的框架模式,具有耦合性低.重用性高.生命周期成本低.可维护性 ...
- Asp.Net MVC4.0 官方教程 入门指南之四--添加一个模型
Asp.Net MVC4.0 官方教程 入门指南之四--添加一个模型 在这一节中,你将添加用于管理数据库中电影的类.这些类是ASP.NET MVC应用程序的模型部分. 你将使用.NET Framewo ...
随机推荐
- 【转】Javascript 中的false,零值,null,undefined和空字符串对象
js 开发中经常会碰到判断是否为空的情况,关于 null 和 undefined 的区别了解的不是很好,刚好看见这篇文章,转过来学习一下,以下是转载正文: 在Javascript中,我们经常会接触到题 ...
- VmodCam top verilog
`timescale 1ns / 1ps /////////////////////////////////////////////////////////////////////////////// ...
- memcached/redis安全性
最近看到说redis,memcached服务器安全的问题,想想也是,使用这两种服务N年了,由于历史问题吧,工作中基本是以memcached为主,后来才慢慢引入运用redis.由于memcached是没 ...
- jQuery EasyUI 数据网格 - 启用行内编辑(转自http://www.runoob.com/jeasyui/jeasyui-datagrid-datagrid12.html)
可编辑的功能是最近添加到数据网格(datagrid)的.它可以使用户添加一个新行到数据网格(datagrid).用户也可以更新一个或多个行.本教程向您展示如何创建一个数据网格(datagrid)和内联 ...
- Mysql多表查询(两张独立表,一张关系表)
一.数据库设计 1.三个数据表长这样 其中user表记录用户信息,cat主要记录男女性别,mete表是用户id和性别id的对应关系 2.具体数据如下 二.查询目标 查询出所有性别为“男”的 ...
- RUP(Rational Unified Process)统一软件过程概述
RUP是Rational公司三位杰出的软件工程大师Grady Booch,Ivar Jacobson,James Rumbaugh提出的一个软件工程过程方法.软件开发过程是将一个用户需求转化为软件系统 ...
- hadoop分布式安装过程
一.安装准备及环境说明 1.下载hadoop-1.2.1,地址:http://apache.spinellicreations.com/hadoop/common/stable/hadoop-1.2. ...
- 【PHP】phpcms html去除空白
// 文件路径:/phpcms/libs/classes/template_cache.class.php 42行 // 第四第五行是新增的 $content = $this->template ...
- 两个Activity之间的交互startActivityForResult的使用
代码如下: package com.zzw.teststartintentforrequest; import android.app.Activity; import android.content ...
- Python LOGGING使用方法
Python LOGGING使用方法 1. 简介 使用场景 场景 适合使用的方法 在终端输出程序或脚本的使用方法 print 报告一个事件的发生(例如状态的修改) logging.info()或log ...