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

 

前两天介绍了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( " οnclick=/ " $( ' {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( " οnclick=/ " { 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

 

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值