ASP.NET 2.0,無重新整理頁面效果!

來源:互聯網
上載者:User

“無重新整理頁面”,只是一種不確切的效果描述(其實還有其他各種方法來實現這個效果),更確切的說法是:在頁面上用JavaScript調用伺服器端的一個方法,然後處理返回的資料。實現它最標準的方法當然是XMLHTTP。但是,程式員都是懶惰的傢伙,每個人都希望能有更方便的方法,或者,更佳的封裝。比如,Lostinet的Rane就是對XMLHTTP的一個很好的封裝。

終於,在ASP.NET 2.0裡面,我們可以輕鬆的來做到這點了。伺服器端任何實現了System.Web.UI.ICallbackEventHandler介面的控制項,都可以通過RaiseCallbackEvent()方法來處理從頁面上的JS指令碼傳遞過來的請求和資料,處理後,再將結果傳回給頁面。這項能力的底層仍然是XMLHTTP。

首先來看看JavaScript是如何調用伺服器端的方法的:

<script language="javascript" type="text/javascript">
    function ClientMethod()
    {
        //獲得伺服器控制項(ControlName為控制項名稱)
        var Control = document.getElementById("ControlName"); 
        //ServerMethod為伺服器方法名,<%=SplitChar %>為一特定字元(為了避免參數中帶有分割符),
        //Control.value為ServerMethod的參數(即控制項的值)
        var arg = "ServerMethod<%=SplitChar %>" + Control.value;
        //啟用一個對伺服器端事件的用戶端回調
        <%= ClientScript.GetCallbackEventReference(this, "arg", "Result", "") %>;
    }
    //處理用戶端回調結果
    function Result(result)
    {
        alert(result);
    }
</script>

下面繼續來看看伺服器端方法:
首先//定義一個分隔字元
public char SplitChar = (char)14;

首先要實現ICallbackEventHandler介面。public string str_content;
    public void RaiseCallbackEvent(string the_string)
    {
        str_content = the_string;
    }

    public string GetCallbackResult()
    {
        //拆分由用戶端傳過來的參數
        string[] parts = str_content.Split(SplitChar);

        //產生ServerMethod的參數隊列
        object[] theArgList = new object[parts.Length - 1];
        for (int i = 1; i < parts.Length; i++)
        {
            theArgList[i - 1] = parts[i];
        }

        //調用ServerMethod
        return (string)GetType().GetMethod(parts[0]).Invoke(this, theArgList);
    }

    //  返回指定控制項的Html代碼
    private string RenderControl(Control control)
    {
        StringWriter writer = new StringWriter(CultureInfo.InvariantCulture);
        HtmlTextWriter Htmlwriter = new HtmlTextWriter(writer);

        control.RenderControl(Htmlwriter );
        Htmlwriter .Flush();
        Htmlwriter .Close();

        return writer .ToString();
    }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.