2012-02-15 100 views
2

Asp.net团队设计了脚本管理器,每页只存在一个实例(HttpHandler),但我无法找到有效的原因,他们为什么扩展了像ScriptManager.GetCurrent这样的方法来获取实例页面。为什么不能开发人员做ScriptManager.GetCurrent方法背后的原因

if(ScriptManager == null) 
{ 
    throw new Exception("The Below ajax control requires ScriptManager in the page"); 
} 
+0

我猜ScriptManager是ScriptManager控件的ID,对吧?当ScriptManager位于MasterPage上时,您无法从用户控件访问该ID。 – slfan 2012-02-15 18:01:29

+0

@slfan对不起,我没有放下这里的情况。无论是任何asp文件(usercontrol,masterpage,子页面,嵌套masterpage)。 Asp.net团队(很多人都在不断改进)设计了一种方法来识别页面中的ScriptManager实例,但是他们没有在页面中的那个请求/响应中设置“Current”ScriptManager类(可能有一个ID像sManager,resourceManager等),就像我知道我可以在启用memebership时使用'User.Identity.Name'来登录人员的用户名。我有种感觉,这是纯粹的传统,为未来作出的决定:) – Deeptechtons 2012-02-16 04:38:35

回答

2

我相信,因为可能有其他地方比页面的文件后面的代码来访问实际的ScriptManager。通过静态方法GetCurrent(),您可以从代码中的任何位置(例如,从类库中)访问当前上下文的ScriptManager。 GetCurrent的实现如下所示:

public static ScriptManager GetCurrent(Page page) 
{ 
    if (page == null) 
    { 
     throw new ArgumentNullException("page"); 
    } 
    return page.Items[typeof(ScriptManager)] as ScriptManager; 
} 

因此,它只是访问ScriptManager实例的快捷方式。

在母版页上定义了ScriptManager时,您的代码无法在内容页面或用户控件上运行。

+0

你是什么意思?>其他地方的代码背后有'HttpContext.Current'右边有'request'和'response'存在(这也意味着脚本管理器) – Deeptechtons 2012-02-15 17:05:39

+0

是真实的,但它是一个捷径。我添加了GetCurrent的实现 – slfan 2012-02-15 17:54:54

相关问题