亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > AJAX > 正文

不用組件實現Ajax效果

2024-09-01 08:26:00
字體:
來源:轉載
供稿:網友

現在.net的ajax組件確實不少了,微軟的ajax extensions用起來很方便,一個updatepanel就可以搞定一切。不過,可能有些朋友更愿意自己來寫。那么在.net里,你是否知道icallbackeventhandler呢?

大家應該都知道asp.net頁面調用時的幾種方式:postback/cross-page posting/server transfer/callback,如果你還不太了解,你可以看看msdn:how to: determine how asp.net web pages were invoked

現在要說的,就是callback這種調用方式。
簡單的說,使用callback可以得到你平??吹侥敲碼jax效果,即不刷新整個頁面,只更新其中一個部分。

使用callback,只需要做以下4步:

1、在你的頁面中繼承system.web.ui.icallbackeventhandler接口

public partial class _default : system.web.ui.page, system.web.ui.icallbackeventhandler
{
    protected void page_load(object sender, eventargs e)
    {
    }
    #region icallbackeventhandler members
    public string getcallbackresult()
    {
    }
    public void raisecallbackevent(string eventargument)
    {
    }
    #endregion
}

如果你沒有使用code-behind,那你也可以在aspx頁面頂部加入下面的代碼:

<%@ implements interface="system.web.ui.icallbackeventhandler" %>

2、在前臺寫一段自定義的javascript,更新頁面

這一段javascript用來更新頁面的某個局部,就像你平常操作的一樣,寫些document.getelementbyid("xxx").innerhtml="working on your request...."。

    <script type="text/javascript">
    function getflag(arg)//這里已經得到服務器端數據據了,服務器端數據就在這個參數arg里。
    {
        document.getelementbyid("result").innerhtml=arg;//我們不作處理,直接顯示在頁面上。
    }
    </script>

你可能有些迷糊,就得到了嗎?連個什么xmlhttprequest都沒有哩……

3、在page_load中再注冊一段javascript

string script = page.clientscript.getcallbackeventreference(this, "arg", "getflag", "");
page.clientscript.registerclientscriptblock(this.gettype(), .......//省略了一大串

上面的getcallbackeventreference是用來得到客戶端函數的引用,發起一個callback到服務器端的,你不必知道詳細內容。

你只需要了解:

  • 第一個參數填this,用來handle客戶端的callback的,它必須繼承icallbackeventhandler接口并提供raisecallbackevent方法,我們已經在繼承了這個接口,上面第一點中的代碼也有raisecallbackevent方法,只是還沒有具體寫內容呢。
  • 第二個參數就是那個 從客戶端傳到服務器端的參數。如果你想要注冊的檢查用戶是否可用,那么這里的值就是用戶輸的那個值。
  • 第三個參數是前臺的javascript函數名,在第二步中我們寫的名字是:getflag。當數據好了,這個javascript函數就會用到。
  • 第四個參數一般用不上。

返回值:一個函數的名字,是客戶端調用的函數名。這個函數會調用到服務器端了。

4、調用你的函數。

<input type="button" value="check it!" onclick="callserver()" />

上面一定是 onclick="callserver()"嗎?呵呵,這要看你了,你在page.clientscript.registerclientscriptblock注冊的什么javascript函數名字,就是什么名字了。(在第3步的第二行code中)

已經完了。如果你還是一頭霧水,沒關系,下面看一個實例

|||

我們寫一個檢測用戶是否已經注冊的小程序,這在每個用戶注冊頁面上都可以用到。

前臺default.aspx:

<%@ page language="c#" autoeventwireup="true" codefile="default.aspx.cs" inherits="_default" enableviewstate="false" %>
<!doctype html public "-//w3c//dtd xhtml 1.0 transitional//en" "http://www.w3.org/tr/xhtml1/dtd/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>icallbackeventhandler demo</title>
    <style type="text/css">
    *{font: 12px "verdana";}
    #user{border:1px solid #080; height:50px;width:500px;padding:20px;}
    input{border:1px solid #508fcc;background:#fff;}
    .ok{color:#090;}
    .bad{color:#f00}
    #result{display:inline;margin: 0 5px 0;}
    </style>
    <script type="text/javascript">
    function getflag(arg)//這里的javascript函數就是服務器查詢完成要調用的函數,我們把服務器返回的數據直接顯示上id為result的div中。
    {
        document.getelementbyid("result").innerhtml=arg;
    }
    </script>
</head>
<body>
    <form id="form1" runat="server">
        <div id="user">
            <input type="text" value="99love" maxlength="10" id="userid" />
            <input type="button" value="check it!" onclick="callserver()" /><div id="result">查詢用戶是否被使用。</div>
        </div>
    </form>
</body>
</html>

上面有一個<input type="button" value="check it!" onclick="callserver()" />,這是我說的第5步的內容,這個函數名字callserver應該和lage_load中注冊的相對應的。

后臺default.aspx.cs:

using system;
using system.data;
using system.configuration;
using system.collections;
using system.web;
using system.web.security;
using system.web.ui;
using system.web.ui.webcontrols;
using system.web.ui.webcontrols.webparts;
using system.web.ui.htmlcontrols;
public partial class _default : system.web.ui.page, system.web.ui.icallbackeventhandler
{
    private string _arg = string.empty;
    protected void page_load(object sender, eventargs e)
    {
        string script = page.clientscript.getcallbackeventreference(this, "arg", "getflag", "");//上面的第3步,取得這個客戶端函數名,script的值可能是這樣的:webform_docallback('__page',arg,getflag,/"/",null,false)
        page.clientscript.registerclientscriptblock(this.gettype(), "callserver", "/nfunction callserver(){/ndocument.getelementbyid(/"result/").innerhtml=/"正在檢查 /"+document.getelementbyid(/"userid/").value+/" 的可用性,請稍候.../";/nvar arg=document.getelementbyid(/"userid/").value;/n" + script + ";/n}", true);
        //上面這一行有點長了,第二個參數最長,看到function callserver()了嗎,這就是和前臺對應的那個函數名<input onclick=xxx,請記得,一定要在callserver函數中加入script的值,也就是上一行的上一行(17行)那個值。注意后面的var arg=...,這個arg和17行的arg是對應的。
    }
    #region icallbackeventhandler members
    public string getcallbackresult()
    {
        system.threading.thread.sleep(1000);//讓線程睡一會,我們好看效果。這是用來模擬不良網絡狀況的。
        return _arg;//返回一個string型,這個string在raisecallbackevent函數中是賦過值的,看下面哦。
    }
    public void raisecallbackevent(string eventargument)
    {
        if (eventargument.equals("99love") || eventargument.equals("blueidea"))//假設這兩個名字不能注冊,實際操作中,你要是比對數據庫記錄的,我們現在簡化處理了。
            _arg = string.format("<span class=/"bad/">很遺憾,{0} 已被使用。</span>", eventargument);//要么已經注冊了
        else
            _arg = string.format("<span class=/"ok/">恭喜您,{0} 可以注冊。</span>", eventargument);//要么就可以注冊
    }
    #endregion
}

運行截圖:

源碼下載

希望這篇文章能在某些時候對您有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲xxxx在线| 久久五月天色综合| 欧美亚洲国产日韩2020| 中文字幕亚洲欧美日韩高清| 精品少妇一区二区30p| 在线成人激情视频| 国产在线精品一区免费香蕉| 日韩欧美亚洲国产一区| 91性高湖久久久久久久久_久久99| 国产日韩欧美夫妻视频在线观看| 日韩女在线观看| 国产精品久久久久久久av大片| 午夜欧美大片免费观看| 91爱视频在线| 在线电影欧美日韩一区二区私密| 国产一区二区三区免费视频| 一区二区三区视频在线| 国产在线视频欧美| 国产精品久久久久7777婷婷| 精品久久久久久久久久国产| 亚洲第一精品夜夜躁人人爽| 国产精品永久在线| 国产精品日韩在线一区| 日韩中文字幕网| 黑人精品xxx一区| 好吊成人免视频| 欧美成人精品不卡视频在线观看| 日韩精品高清在线观看| 萌白酱国产一区二区| 黑人与娇小精品av专区| www.日韩不卡电影av| 亚洲欧美在线免费观看| 国产欧美日韩免费看aⅴ视频| 欧美成人在线免费| 不卡中文字幕av| 亚洲少妇激情视频| 欧美黑人xxxⅹ高潮交| 日韩欧美精品在线观看| 亚洲免费成人av电影| 日韩亚洲一区二区| 日韩高清av在线| 日本91av在线播放| 久久影视电视剧免费网站| 激情成人在线视频| 日韩免费av一区二区| 成人网在线免费观看| 播播国产欧美激情| 亚洲欧美色婷婷| 国产精品va在线播放我和闺蜜| 色爱精品视频一区| 久久视频在线看| 亚洲三级免费看| 久久综合电影一区| 欧洲亚洲免费视频| 久久亚洲精品一区| 91在线观看欧美日韩| 日韩欧美aaa| 日韩av123| 亚洲欧洲在线播放| 国产最新精品视频| 午夜精品一区二区三区av| 日韩欧美中文字幕在线播放| 日本不卡高字幕在线2019| 成人精品久久av网站| 亚洲天堂第一页| 欧美成人四级hd版| 久久精品视频中文字幕| 国产精品亚洲一区二区三区| 国产日韩视频在线观看| 日本免费久久高清视频| 91社影院在线观看| 狠狠躁夜夜躁久久躁别揉| 亚洲成人激情在线| 久久免费观看视频| 2019国产精品自在线拍国产不卡| 欧美日韩一区二区三区| 久久露脸国产精品| 国产欧美精品一区二区三区介绍| 欧美视频在线观看 亚洲欧| 亚洲成人av在线| 欧美成人四级hd版| 亚洲美女av在线| 亚洲精品成人av| 国产精品成人免费视频| 亚洲伊人久久综合| 国内精品一区二区三区| 亚洲欧洲一区二区三区在线观看| 欧美激情一区二区久久久| 一区二区亚洲欧洲国产日韩| 日韩电影大全免费观看2023年上| 国产视频在线观看一区二区| 成人av在线网址| 中文字幕日韩精品在线观看| 成人免费看吃奶视频网站| 久久精品久久久久电影| 少妇精69xxtheporn| 欧美高清在线视频观看不卡| 国产视频久久网| 中文字幕亚洲欧美在线| 一本色道久久88精品综合| 搡老女人一区二区三区视频tv| 欧美日韩国产在线| 亚洲日韩中文字幕在线播放| 国产91九色视频| 成人黄色免费在线观看| 啊v视频在线一区二区三区| 欧美性xxxx极品高清hd直播| 91在线播放国产| 国产精品狠色婷| 国产亚洲精品一区二555| 国产精品免费视频久久久| 国产婷婷色综合av蜜臀av| 久久av资源网站| 亚洲xxxx18| 亚洲va久久久噜噜噜久久天堂| 国产精品免费在线免费| 国产欧美最新羞羞视频在线观看| 日韩国产中文字幕| 成人免费黄色网| 亚洲韩国欧洲国产日产av| 国产91精品青草社区| 久久成人综合视频| 亚洲美女激情视频| 欧美大全免费观看电视剧大泉洋| 午夜免费在线观看精品视频| 97热精品视频官网| 亚洲成色999久久网站| 日韩国产欧美精品一区二区三区| 亚洲аv电影天堂网| 一二美女精品欧洲| 色噜噜狠狠狠综合曰曰曰88av| 97视频在线观看视频免费视频| 国产女同一区二区| 亚洲午夜激情免费视频| 亚洲精品影视在线观看| 色综合久久天天综线观看| 日韩国产一区三区| 中文字幕av一区二区三区谷原希美| 久久精品99久久久久久久久| 久久久久久免费精品| 日本午夜精品理论片a级appf发布| 国产精品www色诱视频| 国产精品久久久久久久久久99| 日韩午夜在线视频| 国产免费一区二区三区在线观看| 欧美日本中文字幕| 亚洲成人激情在线| 欧美性猛交xxxxx免费看| 一本一本久久a久久精品综合小说| 欧美孕妇与黑人孕交| 欧美性受xxxx白人性爽| 国产精品久久久久久久久久免费| 91精品国产综合久久香蕉922| 国产精品免费电影| 国产精品av免费在线观看| 亚洲人成绝费网站色www| 久久久www成人免费精品| 国产精品成人v| 欧美视频在线观看免费网址| 97国产精品视频| 日本视频久久久| 亚洲二区中文字幕| 欧美小视频在线| 亚洲片在线资源|