前两天介绍了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
效果就是你想的那个效果,事就是这么个事,就不多说了。
Asp.net Mvc Framework 系列