Asp.net MVC Preview 4 中自定义Jquery的HtmlHelper扩展

简介: 前两天介绍了mvc pv4中AjaxHelper的用法 的确是比较方便,不过也有其缺点,那就是并不是所有人都用Asp.net Ajax的,所以这样做还是显示出了ms的霸气   没办法,工程里都用的是JQuery于是先试写了2个小功能   先说使用方法吧,第一个功能是Ajax载入另个页面                c.

前两天介绍了mvc pv4中AjaxHelper的用法

的确是比较方便,不过也有其缺点,那就是并不是所有人都用Asp.net Ajax的,所以这样做还是显示出了ms的霸气

 

没办法,工程里都用的是JQuery于是先试写了2个小功能

 

先说使用方法吧,第一个功能是Ajax载入另个页面

     < div  id ="as" >
    
</ div >
    
<% = Html.JLoadLink < MvcApplication1.Controllers.HomeController > (c  =>  c.Ajax(),  " Ajax载入 " new  AjaxOptions() {
    UpdateTargetId
= " as "

}) %>

 最后生成的是一个连接,一点,就将HomeController.Ajax()载入到as这个div中了

 

另一个扩展呢,是一个简单的toggle功能

就是一个元素,原来显示就让它隐藏,原来隐藏就让他显示,不过还是挺多地方用到的

 

     <% = Html.JToggle( " 显示/隐藏 " , " d1 " ) %>
    
    
< div  id ="d1"  style ="background: green" >
        天之道 损有余 而补不足
< br  />
        是故虚胜实 不足胜有余
< br  />
    
</ div >

   <% = Html.JToggle( " 显示/隐藏 " , " #d1 " ) %>
    
    
< div  id ="d1"  style ="background: green" >
        天之道 损有余 而补不足
< br  />
        是故虚胜实 不足胜有余
< br  />
    
</ div >

 

当然,fade也可以,那样就漂亮了许多了


好,步入正题 ,代码如下:

 

using  System;
using  System.Data;
using  System.Configuration;
using  System.Linq;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.HtmlControls;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Xml.Linq;
using  System.Web.Mvc;
using  System.Globalization;
using  System.Collections.Generic;
using  System.Text;
using  System.Web.Routing;

namespace  System.Web.Mvc {
    
///   <summary>
    
///   http://chsword.cnblogs.com
    
///  重典
    
///  QQ:77298666
    
///   </summary>
     static   public   class  AjaxJquery {
        
///   <summary>
        
///  就是一个元素,原来显示就让它隐藏,原来隐藏就让他显示
        
///   </summary>
        
///   <param name="a"></param>
        
///   <param name="linkText"></param>
        
///   <param name="ToggleID"></param>
        
///   <returns></returns>
         static   public  String JToggle( this  HtmlHelper a,  string  linkText, String ToggleID)  {
            
return  a.JToggle( linkText, ToggleID,  null );
        }
        
///   <summary>
        
///  就是一个元素,原来显示就让它隐藏,原来隐藏就让他显示
        
///   </summary>
        
///   <param name="a"></param>
        
///   <param name="linkText"></param>
        
///   <param name="ToggleID"></param>
        
///   <param name="htmlAttributes"></param>
        
///   <returns></returns>
         static   public  String JToggle( this  HtmlHelper a,  string  linkText, String ToggleID,  object  htmlAttributes) {
            
string  linkFormat  =   " <a href=\ " { 0 }\ "  {1} {3}>{2}</a> " ;
            
string  atts  =   string .Empty;
            
string  ajaxs  =   string .Empty;
            
if  (htmlAttributes  !=   null ) // 由object 序列成key="value" 这样的属性模式
                atts  =  AjaxJquery.ConvertObjectToAttributeList(htmlAttributes);
            
            ajaxs 
=   string .Format( " onclick=\ " $( ' {0} ' ).toggle();\ "   " ,
                ToggleID[
0 ==   ' # '   ?  ToggleID :  " # "   +  ToggleID // Jquery里id不是要#嘛得验一下个人的那啥不同啊
                );
            
string  result  =   string .Format(CultureInfo.InvariantCulture, linkFormat,  " # " , atts, a.Encode(linkText), ajaxs);
            
return  result;
        }
    
///   <summary>
        
///  生成一个可以加载地址的Ajax连接
    
///   </summary>
    
///   <typeparam name="T"></typeparam>
    
///   <param name="a"></param>
    
///   <param name="action"></param>
    
///   <param name="linkText"></param>
    
///   <param name="ajaxoptions"></param>
    
///   <returns></returns>
         static   public   string  JLoadLink < T > ( this  HtmlHelper a, System.Linq.Expressions.Expression < Action < T >>  action,  string  linkText, AjaxOptions ajaxoptions)  where  T : Controller {
            
return  a.JLoadLink < T > (action, linkText,  null , ajaxoptions);
        }
        
///   <summary>
        
///  生成一个可以加载地址的Ajax连接
        
///   </summary>
        
///   <typeparam name="T"></typeparam>
        
///   <param name="a"></param>
        
///   <param name="action"></param>
        
///   <param name="linkText"></param>
        
///   <param name="htmlAttributes"></param>
        
///   <param name="ajaxoptions"></param>
        
///   <returns></returns>
         static   public   string  JLoadLink < T > ( this  HtmlHelper a, System.Linq.Expressions.Expression < Action < T >>  action,  string  linkText,  object  htmlAttributes, AjaxOptions ajaxoptions)  where  T : Controller {
            
string  linkFormat  =   " <a href=\ " { 0 }\ "  {1} {3}>{2}</a> " ;
            
string  atts  =   string .Empty;
            
string  ajaxs  =   string .Empty;
            
if  (htmlAttributes  !=   null )
                atts 
=  AjaxJquery.ConvertObjectToAttributeList(htmlAttributes);
            
string  link  =  LinkBuilder.BuildUrlFromExpression < T > (a.ViewContext, action);
            
// * */a.BuildUrlFromExpression<T>(action);
             if  (ajaxoptions  !=   null ) {
                ajaxs 
=   string .Format( " onclick=\ " { 0 }$ActionLink( ' {1} ' , ' {2} ' ); return   false ;\ "   " ,
                    ajaxoptions.OnBegin,
// $ActionLink这个方法定义在framework.js里,可以看一下
                    link,
ajaxoptions.UpdateTargetId
                    );
            }

            
string  result  =   string .Format(CultureInfo.InvariantCulture, linkFormat,  " # " , atts, a.Encode(linkText), ajaxs);
            
return  result;
        }
        
///   <summary>
        
///  从MVC工程里搞出来的,原来有程序集保护用不了。
        
///   </summary>
        
///   <param name="value"></param>
        
///   <returns></returns>
         public   static   string  ConvertObjectToAttributeList( object  value) {
            StringBuilder sb 
=   new  StringBuilder();
            
if  (value  !=   null ) {
                IDictionary
< string object >  d  =  value  as  IDictionary < string object > ;
                
if  (d  ==   null ) {
                    d 
=   new  RouteValueDictionary(value);
                }

                
string  resultFormat  =   " {0}=\ " { 1 }\ "   " ;
                
foreach  ( string  attribute  in  d.Keys) {
                    
object  thisValue  =  d[attribute];
                    
if  (d[attribute]  is   bool ) {
                        thisValue 
=  d[attribute].ToString().ToLowerInvariant();
                    }
                    sb.AppendFormat(resultFormat, attribute.Replace(
" _ " "" ).ToLowerInvariant(), thisValue);
                }
            }
            
return  sb.ToString();
        }
    }
}


 

 最后再给个下载,让大家看看效果

JqueryHelper.rar

 

 

效果就是你想的那个效果,事就是这么个事,就不多说了。

目录
相关文章
|
4月前
|
开发框架 JSON JavaScript
ASP.NET Core3.1实战教程---基于Jquery单文件上传
ASP.NET Core3.1实战教程---基于Jquery单文件上传
27 0
|
1月前
|
前端开发 Java 应用服务中间件
Springboot对MVC、tomcat扩展配置
Springboot对MVC、tomcat扩展配置
|
4月前
|
开发框架 前端开发 .NET
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
ASP.NET CORE 3.1 MVC“指定的网络名不再可用\企图在不存在的网络连接上进行操作”的问题解决过程
46 0
|
17天前
|
开发框架 前端开发 JavaScript
JavaScript云LIS系统源码ASP.NET CORE 3.1 MVC + SQLserver + Redis医院实验室信息系统源码 医院云LIS系统源码
实验室信息系统(Laboratory Information System,缩写LIS)是一类用来处理实验室过程信息的软件,云LIS系统围绕临床,云LIS系统将与云HIS系统建立起高度的业务整合,以体现“以病人为中心”的设计理念,优化就诊流程,方便患者就医。
22 0
|
2月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
32 0
|
2月前
|
SQL Cloud Native NoSQL
.NET Aspire Preview 4 发布!
.NET Aspire 是一个有态度的云原生应用开发框架,旨在改善生成 .NET 云原生应用的体验,并提供一组强大的工具来帮助你生成和运行分布式应用。它允许开发者快速创建属于自己的云原生应用,或改造已有的项目成为云原生应用。
77 3
|
2月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
113 5
|
9月前
|
存储 开发框架 前端开发
[回馈]ASP.NET Core MVC开发实战之商城系统(五)
经过一段时间的准备,新的一期【ASP.NET Core MVC开发实战之商城系统】已经开始,在之前的文章中,讲解了商城系统的整体功能设计,页面布局设计,环境搭建,系统配置,及首页【商品类型,banner条,友情链接,降价促销,新品爆款】,商品列表页面,商品详情等功能的开发,今天继续讲解购物车功能开发,仅供学习分享使用,如有不足之处,还请指正。
124 0
|
10月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
[回馈]ASP.NET Core MVC开发实战之商城系统(三)
67 0
|
10月前
|
开发框架 前端开发 .NET
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
[回馈]ASP.NET Core MVC开发实战之商城系统(一)
119 0