熟悉asp.net事件机制的人都知道,在aspnet生成的页面里有两个隐藏域。
- <inputtype="hidden"name="__EVENTTARGET"id="__EVENTTARGET"value=""/>
- <inputtype="hidden"name="__EVENTARGUMENT"id="__EVENTARGUMENT"value=""/>
第一个“__EVENTTARGET”保存着要触发事件的那个控件的ID,第二个在某些控件触发事件时用来保存事件的名称的某个参数。当页面上的某个控件如:
- <asp:ButtonID="btn_ItemAdd"runat="server"CssClass="button"Text="增加"/>
被点击时,脚本会自动将“btn_ItemAdd”赋值给__EVENTTATGT,然后再用Submit()提交整个页面。在这里很自然我们就会想到替换aspnet页面自带的脚本,换成异步AJAX的方式提交页面。下面是本人整理后的替换代码,其中使用Jquery和Jquery.form插件。
- functionajaxEvent(eventTarget,eventArgument,callBack,callBackArg){
- try{
- vartheForm=document.forms[0];
-
- if(!document.getElementById("__EVENTTARGET")){
- varMy__EVENTTARGET="<inputtype='hidden'value='"+eventTarget+"'id='__EVENTTARGET'name='__EVENTTARGET'/>";
- $(My__EVENTTARGET).appendTo("form");
- }
- if(!document.getElementById("__EVENTARGUMENT")){
- varMy__EVENTARGUMENT="<inputtype='hidden'value='"+eventArgument+"'id='__EVENTARGUMENT'name='__EVENTARGUMENT'/>";
- $(My__EVENTARGUMENT).appendTo("form");
- }
- $("#__EVENTTARGET").val(eventTarget);
- $("#__EVENTARGUMENT").val(eventArgument);
- }
- catch(e){
- alert(e);
- }
- try{
- $(theForm).ajaxSubmit(
- function(dataFormServer){
- varreturnText=dataFormServer.split("::");
- if(returnText[0]=="False"){
- alert(returnText[1]);
- return;
- }
- if(callBack){
- if(callBackArg){
- callBack(callBackArg);
- }
- else{
- callBack(dataFormServer);
- }
- }
- }
- );
- }
- catch(e){
- }
- returnfalse;
- }
有了上面的函数后,我们设置按钮的onclientclick属性为ajaxEvent("btn_ItemAdd","");代码如下
- <asp:ButtonID="btn_ItemAdd"runat="server"CssClass="button" OnClick="btn_ItemSelect_Click"Text="增加"OnClientClick="returnajaxEvent('btn_ItemAdd','')/>
这样即可触发控件onclick所定义的后台事件了。
采用Ajax触发控件后台事件的方式,可以大大降低开发AJAX程序的成本,缩短开发时间。读者可以自行将上述操作封装成aspnet控件。你可以将你的自定义控件继承自Button,linkbuttn等控件,然后设置他们的Attribute[onclick] = "ajaxEvent()"即可。
需要注意的是上述代码要成功运行需要在页面里添加几个JS引用
- <scriptlanguage="javascript"type="text/javascript"src="../JS/jquery.js"></script>
- <scriptlanguage="javascript"type="text/javascript"src="../JS/iutil.js"></script>
- <scriptlanguage="javascript"type="text/javascript"src="../JS/idrag.js"></script>
- <scriptlanguage="javascript"type="text/javascript"src="../JS/jquery.form.js"></script>
这些都是Jquery东西,在网上很容易下到。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|