[原]抛弃form runat="server"使用AjaxPro

前段时间做个项目要用到AJAX的异步获取,使用了AjaxPro.2.dll,这东西的确方便,省了不少的代码量,但是就是有个不好,就是要在调用的页面使用<form runat="server">。这东西,在我不需要的时候,给我增加那么一点的开销,不爽。要想不用<form runat="server">的话,办法不是没有,可以出AjaxPro的运行机制恶出方法来。
首先,在使用的页面声明页面可用的方法,例如
register.aspx

<form id="regform" runat="server" onsubmit="return chk();">
..
</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

using AjaxPro;
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">啦。

 

一家之见,如有错误之处,欢迎拍砖。


posted @ 2008-01-08 21:07  xin478  阅读(925)  评论(2编辑  收藏  举报