Asp.net MVC Preview 4 中自定義Jquery的HtmlHelper擴充套件
阿新 • • 發佈:2018-12-27
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>staticpublicclass AjaxJquery {
///<summary>/// 就是一個元素,原來顯示就讓它隱藏,原來隱藏就讓他顯示
///</summary>///<param name="a"></param>///<param name="linkText"></param>///<param name="ToggleID"></param>///<returns></returns>staticpublic 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>staticpublic 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>staticpublicstring 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>staticpublicstring 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}');returnfalse;\"",
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>publicstaticstring 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] isbool) {
thisValue = d[attribute].ToString().ToLowerInvariant();
}
sb.AppendFormat(resultFormat, attribute.Replace("_", "").ToLowerInvariant(), thisValue);
}
}
return sb.ToString();
}
}
}
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.Collections.Generic;
using System.Text;
using System.Web.Routing;
namespace System.Web.Mvc {
///<summary>///http://chsword.cnblogs.com/// 重典
/// QQ:77298666
///</summary>staticpublicclass AjaxJquery {
///<summary>/// 就是一個元素,原來顯示就讓它隱藏,原來隱藏就讓他顯示
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>staticpublic 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>staticpublicstring 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>staticpublicstring 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}');returnfalse;\"",
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>publicstaticstring 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] isbool) {
thisValue = d[attribute].ToString().ToLowerInvariant();
}
sb.AppendFormat(resultFormat, attribute.Replace("_", "").ToLowerInvariant(), thisValue);
}
}
return sb.ToString();
}
}
}