ScriptManager的簡單用法

來源:互聯網
上載者:User

資料中如實是說: 
      1, ScriptManager(指令碼控制器)是asp.net ajax存在的基礎.
      2, 一個頁面只允許有一個ScriptManager,並且放在其他ajax控制項的前面.
      3,ScriptManager掌管著用戶端Ajax頁的多有指令碼,並在頁面中註冊Ajax類庫,用來實現頁面的局部更新和對Web服務的調用.
下面是scriptManager的結構:

下面介紹下ScriptManager的幾個屬性和一些子項目

   a, EnablePartialRendering: (預設局部渲染)比較重要,用來表示此頁面是否允許局部重新整理(預設為true)
   b, AllowCustomErrorsRedirect :當發生錯誤時候,是否導航到web.config中定義的錯誤頁面,如果設定為false,則使用AsyncPostBackErrorMessage和OnAsyncPostBackError提示錯誤.
   c, AsyncPostBackErrorMessage: 非同步呼叫發生錯誤時的提示資訊.
   d, OnAsyncPostBackError: 非同步呼叫發生錯誤時的事件
   e, AsyncPostBackTimeOut: 非同步呼叫的有效時間 預設為 90秒
   f, AuthenticationService: 用來表示提供驗證服務的路徑.
   g, ProfileService    表示提供個人化服務的路徑
   h, Scripts    對指令碼的調用,可以恰套多個ScriptReference摸板對多個指令檔的調用
   i,  Service   對服務的調用 也可以恰套多個ServiceReference摸板以實現多個服務的引用

  下面簡單介紹下上面屬性的基本使用格式:

呼叫指令碼檔案:

  指令碼語言我們可以直接寫在頁面的<script></script> 元素內
也可以使用註冊方式在頁面的head中
<script type="text/javascript" src=""> <script>
在ajax技術中也提供了一種註冊方式,
<asp:ScriptManager ID="ScriptManager" runat="server">
         <Scripts>

                 <asp:ScriptReference Path="" />       

         <Scripts>
</asp:ScriptManager>  

從<Scripts>來看,它可以多個js檔案,如果單能實現這個功能覺得微軟有點話蛇添足,它的主要用途是調用ajax中已經存在的Javascrtpt指令檔.

如:
<asp:ScriptManager runat="server" ID="scriptManager">
     <Scripts>
         <asp:ScriptReference Assembly="Microsoft.Web.Preview" Name="PreviewScript.js"  />
         <ssp:ScriptReference Assembly="Microsoft.Web.Preview" Name="PreviewDragDrop.js />
</asp:ScriptManager>

調用Web Service

ScriptManager的主要作用就是在用戶端 調用一些伺服器的代碼,比較常用的就是將web service註冊在用戶端,從而可以用javascript指令碼中實現對web service的調用

下面使用倆個例子說明對web service中方法的調用:
頁面代碼:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!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>無標題頁</title>

</head>
<body>
    <form id="form1" runat="server">
    <div>
    <input type="text" id="txtName" />
    <input type="button" value="帶參數的web service方法調用" onclick="ReferencSercviceMethod2()" />
    <input type="button" value="不帶參數的web service方法調用" onclick="ReferenceServiceMethod1()" />
    </div>
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    <Services>
    <asp:ServiceReference Path="WebServiceTest.asmx" />
    </Services>
    <Scripts>
    <asp:ScriptReference Path="Script/JScript.js" />
    </Scripts>
    </asp:ScriptManager>
    </form>
</body>
</html>

js代碼:
function ReferenceServiceMethod1(){
    WebServiceTest.HelloWorld(GetResult);
}
function GetResult(result){
    alert(result);
}

function ReferencSercviceMethod2(){
WebServiceTest.SayHelloWorld(document.getElementById("txtName").value,GetResult);
}

web service代碼:
using System;
using System.Collections;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;

/// <summary>
///WebServiceTest 的摘要說明
/// </summary>
[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
//這句一定要加上
[System.Web.Script.Services.ScriptService]
public class WebServiceTest : System.Web.Services.WebService {

    public WebServiceTest () {

        //如果使用設計的組件,請取消注釋以下行 
        //InitializeComponent(); 
    }

    [WebMethod]
    public string HelloWorld() {
        return "Hello World";
    }
    [WebMethod]
    public string SayHelloWorld(string name)
    {
        return "Hello World " + name;
    }
    
    
}

下面簡單介紹下用scriptManager的動態註冊一個web service

可以刪除掉上面頁面代碼中<Services></Services>段

在page的代碼的load事件中加入下面代碼:

    protected void Page_Load(object sender, EventArgs e)
    {
        ServiceReference service = new ServiceReference("WebServiceTest.asmx");
        ScriptManager1.Services.Add(service);
    }

OnAsyncPostBackError的使用

在scriptManager中可以捕獲局部更新失敗的錯誤,OnAsyncPostError表示當回傳處理髮生錯誤時的事件
AsyncPostBackMessage表示發生錯誤時的提示資訊。
頁面代碼:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!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>無標題頁</title>

</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server" 
        onasyncpostbackerror="ScriptManager1_AsyncPostBackError">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Button ID="Button1" runat="server" Text="觸發錯誤按鈕" onclick="Button1_Click" />
        </ContentTemplate>
    </asp:UpdatePanel>
    </form>
</body>
</html>

cs檔案代碼:
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        try
        {
            (int.Parse("") + 1).ToString();
        }
        catch ( Exception  ex)
        {
            ex.Data["ExtraInfo"] = "類型轉換錯誤!";
            throw ex;
        }
    }

    protected void ScriptManager1_AsyncPostBackError(object sender, AsyncPostBackErrorEventArgs e)
    {
        if (e.Exception.Data["ExtraInfo"] != null)
        {
            ScriptManager1.AsyncPostBackErrorMessage = e.Exception.Message + "---注意";
        }
        else
        {
            ScriptManager1.AsyncPostBackErrorMessage = "其他原因導致運行失敗";
        }
    }
}

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.