脚本管理器控件实际上是做什么的?

43
我有一个小疑问,谷歌无法回答,所以我想在这里找到答案。 为什么我们应该添加

 <asp:ScriptManager ID="ScriptManager1" runat="server">
 </asp:ScriptManager>

控制以便使用

  <asp:UpdatePanel runat="server"> in out aspx page.

希望有人能给出答案。

3个回答

46

ScriptManager 控件向页面注册 Microsoft AJAX Library 的脚本。这样可以启用客户端脚本支持功能,例如部分页面呈现和 Web 服务调用。

您必须在页面上使用 ScriptManager 控件才能启用 ASP.NET AJAX 的以下功能:

1. Microsoft AJAX Library 的客户端脚本功能以及您想要发送到浏览器的任何自定义脚本。

protected void Button1_Click(object sender, EventArgs e)
{
    Page.ClientScript.RegisterStartupScript(
        this.GetType(),"myscript","alert('hello world!');");
}

2. 部分页面呈现允许页面上的区域在不需要从服务器重新加载整个页面的情况下进行独立刷新。ASP.NET AJAX UpdatePanel、UpdateProgress和Timer控件需要ScriptManager控件以支持部分页面呈现。

3. Web服务的JavaScript代理类,使您可以使用客户端脚本以强类型对象的方式访问Web服务。

[WebMethod]
public int Add(int a, int b) { return a + b; }

function CallAdd()
{
    // method will return immediately
    // processing done asynchronously
    WebService.Add(0,6, OnMethodSucceeded, OnMethodFailed);
}

4. 用于访问 ASP.NET 身份验证和配置文件应用服务的 JavaScript 类。

Sys.Services.AuthenticationService.login
Sys.Services.AuthenticationService.logout

<script type="text/javascript">
    function MyMethod(username, password)
    {
        Sys.Services.AuthenticationService.login(username,
            password,false,null,null,null,null,"User Context"); 
    }
</script>

更多信息请参见http://msdn.microsoft.com/en-us/magazine/cc163354.aspx


2
我可以在不使用Microsoft AJAX库的情况下使用ScriptManager吗? - Kiquenet
@Kiquenet 不可以,但是自从4.0版本起,Microsoft AJAX库已经内置到ASP.NET WebForms中,因此它始终可用。但是,它生成的老式JS与现代(ECMAScript 2015后)JavaScript相比看起来相当糟糕,例如它使用XMLHttpRequest而不是fetch - Dai

24
除了以上的答案,我想补充一些关于使用ScriptManager控件的原因。你提到的控件UpdatePanelScriptManager是用于ASP.NET AJAX Enabled网站的。
  • 首先,我们使用它们是因为在传统的网页中,整个页面在postback后被加载,发送到浏览器的HTML比实际需要的要大得多。
  • 其次,由于整个页面被替换,浏览器必须关闭旧页面然后绘制新页面。这会导致页面“闪烁”,从而导致用户体验不佳。 enter image description here

ScriptManager控件作为客户端页面和服务器之间的桥梁。由于它像一个桥梁,如果需要添加其他AJAX控件,则必须使用此控件。它管理脚本资源(在客户端使用的JavaScript文件),像之前展示的那样处理局部页面更新,并处理与您的网站的交互,例如Web服务和ASP.NET应用程序服务,如成员身份、角色和配置文件。每当UpdatePanel中的一个控件导致向服务器发送postback时,只有该UpdatePanel中的内容会被刷新。

如果您分析从服务器发送到浏览器的数据(使用Fiddler或Wireshark等网络分析工具),您会发现仅向客户端发送了有限量的数据。

如果您认为只需要在少数页面上使用Ajax功能,则通常将ScriptManager控件直接放置在内容页中。

如果您要在许多ASPX页面中使用Ajax功能,则可以将ScriptManager放置在主页面中,以便在基于此主页面的所有页面中都可用。

每个页面只能有一个ScriptManager(即只有一个桥梁,如果有两个桥梁,页面请求/响应可能会混淆!?:D),因此如果将其添加到主页面中,则无法将其添加到内容页中。为了从内容页访问在主页面中定义的ScriptManager控件,可以使用ScriptManagerProxy


5

ScriptManager控件管理AJAX启用的ASP.NET Web页面的客户端脚本。因此,为了使用UpdatePanel或任何其他AJAX控件,我们必须在开始时使用ScriptManager控件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接