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

 

 

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

目录
相关文章
|
开发框架 JSON JavaScript
ASP.NET Core3.1实战教程---基于Jquery单文件上传
ASP.NET Core3.1实战教程---基于Jquery单文件上传
152 0
|
JavaScript 前端开发
前端基础 - JQuery自定义校验器
前端基础 - JQuery自定义校验器
140 0
|
开发框架 JSON .NET
ASP.NET Core 自定义配置警告信息
自定义配置警告信息需要在 startup 类中的 ConfigureService 方法中进行配置示例: // 注册 控制器服务 services.AddControllers(configure: setup => { setup.ReturnHttpNotAcceptable = true; ...
222 0
|
JavaScript
jQuery 自定义动画 animate(详细步骤)
jQuery 自定义动画 animate(详细步骤)
182 0
|
JavaScript
jQuery 自定义插件
jQuery 自定义插件
97 0
|
监控 安全 API
Docker + .NET API:简化部署和扩展
Docker + .NET API:简化部署和扩展
162 1
|
监控 安全 API
最完美的扩展Docker + .NET API:简化部署和扩展
最完美的扩展Docker + .NET API:简化部署和扩展
248 0
|
JavaScript
jQuery 自定义插件(详细步骤)
jQuery 自定义插件(详细步骤)
195 0
|
数据库
分享一个 .NET EF 6 扩展 Where 的方法
分享一个 .NET EF 6 扩展 Where 的方法
161 0
|
开发框架 中间件 .NET
asp.net core 自定义中间件【以dapper为例】
asp.net core 自定义中间件【以dapper为例】
328 81

相关课程

更多