您的位置:首页 > Web前端 > JQuery

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

2008-07-22 11:32 926 查看
前两天介绍了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

效果就是你想的那个效果,事就是这么个事,就不多说了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: