[原]抛弃form runat="server"使用AjaxPro
前段时间做个项目要用到AJAX的异步获取,使用了AjaxPro.2.dll,这东西的确方便,省了不少的代码量,但是就是有个不好,就是要在调用的页面使用<form runat="server">。这东西,在我不需要的时候,给我增加那么一点的开销,不爽。要想不用<form runat="server">的话,办法不是没有,可以出AjaxPro的运行机制恶出方法来。
首先,在使用的页面声明页面可用的方法,例如
register.aspx
..
</form>
<script language="javascript" type="text/javascript">
function checkusername(usn)
{
if(!/^([\w._-]{4,20})/.test(usn))
seterr("usndd");
else{
setblur("usndd");
if(usn.length>5){
$("usnimg").innerHTML='Sending';
Cate.Page.Register.CheckUserName(usn,getAdd);
}
}
}
</script>
register.aspx.cs
namespace Cate.Page
{
public partial class Register : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{}
[AjaxMethod]
public bool CheckUserName(string value)
{
return Users.CheckUserName(value);
}
}
}
运行后,在页面查看源代码的话就会发现在原来<form runat=server>下面插入了
<script type="text/javascript" src="/Category/ajaxpro/prototype.ashx"></script>
<script type="text/javascript" src="/Category/ajaxpro/core.ashx"></script>
<script type="text/javascript" src="/Category/ajaxpro/converter.ashx"></script>
<script type="text/javascript" src="/Category/ajaxpro/Cate.Page.Register,Cate.Page.ashx"></script>
大体上就是由AjaxPro.AjaxHandlerFactory接过对ajaxpro/*.ashx的请求,调用相关的类方法。各脚本的具体作用及实现在他出已有很精辟的论述,此处不再班门弄斧了。想要去除掉<form runat="server">,作如下修改就好。
首先,砍掉<form runat="server">的先。
其次在页面加入,
<script type="text/javascript" src="/Category/ajaxpro/prototype.ashx"></script>
<script type="text/javascript" src="/Category/ajaxpro/core.ashx"></script>
<script type="text/javascript" src="/Category/ajaxpro/converter.ashx"></script>
这个都一样,计较的话,可以将以上三个的源代码保存成.js的文件,又减少运行了~~~
然后,关键的是改<script type="text/javascript" src="/Category/ajaxpro/Cate.Page.Register,Cate.Page.ashx"></script>
,这个我这里是用MS的WebDeployment补丁生成的Cate.Page,是生成的效果了。如果是开发时的话,这里应该是像<script type="text/javascript" src="/Category/ajaxpro/Cate.Page.Register,App_Web_-x7qicfu.ashx"></script>这种样子的,这时候的名称App_Web_-x7qicfu是第一次运行时随机生出的,不能预先知道,要想在开发的时候改,有点难度。
最好的,就是将AJAX的操作放在业务层的类库里,比如Cate.BLL.Ajax中,然后将这个<script type="text/javascript" src="/Category/ajaxpro/Cate.Page.Register,Cate.Page.ashx"></script>搞上去就可以了,感觉这样更好。当然,这时候就要对AjaxPro.2.dll的引用先了。
这样的话,页面里面就可以不用<form runat="server">啦。
一家之见,如有错误之处,欢迎拍砖。