C# 使用多个脚本管理器

C# 使用多个脚本管理器,c#,asp.net,ajax,scriptmanager,C#,Asp.net,Ajax,Scriptmanager,我有一个asp.net 4.0应用程序,其中所有页面都使用母版页。我在母版页和子版页中都有几个动态方面。对于这两种模式,我希望能够将内置的Microsoft ScriptManager与这种模式结合使用: 代码隐藏: using System; using System.Web; using System.Web.Services; namespace MyApp.Secure { public partial class myPage : System.Web.UI.Page

我有一个asp.net 4.0应用程序,其中所有页面都使用母版页。我在母版页和子版页中都有几个动态方面。对于这两种模式,我希望能够将内置的Microsoft ScriptManager与这种模式结合使用:

代码隐藏:

using System;
using System.Web;
using System.Web.Services;

namespace MyApp.Secure
{
    public partial class myPage : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
        }

        [WebMethod]
        public static string GetString()
        {
            return "abc";
        }
    }
}
然后在页面内容本身中:

<script>
   PageMethods.GetString(OnSucceeded, OnFailed);

    function OnSucceeded(rslt) {
        alert('cool,worked.');
    }

    function OnFailed(error) {
        alert('ooops,failed.');
    }

</script>
所以,为了使用这种技术,我想在母版页和子版页中公开静态[WebMethod]。我的问题是,如何使用ScriptManager来管理它?据我所知,我需要在表单标签中有一个ScriptManager为什么?因此添加了一个javascript库,允许我使用PageMethods对象。我是否应该在母版页中创建一个ScriptManager,并将其塞进母版页中一个无用的表单标记中?ScriptManager会在我的子页面中拾取[WebMethod]函数吗?那么表单标签呢:我知道我只能有一个表单runat='server'标签,那么如何在母版页中使用我需要的其他表单来管理它呢?就像我的小表单在页面顶部包装我的搜索功能一样


谢谢

母版页上的脚本管理器在表单标签中就足够了。在继承主控形状的页面上,放置scriptmanagerproxy控件


我认为人们通常使用一个表单标签,然后对于表单按钮,回发处理适当的操作,比如重定向到搜索页面。我不喜欢这种方法,当你只想重定向到带有查询字符串的搜索页面时,为什么还要处理回发呢。我经常使用javascript来解决这个问题,或者单击按钮将表单操作更改为任何合适的操作,或者一起覆盖提交按钮类型,让javascript构建新的url并更改位置栏。在ASP.Net中,您只能有一个表单标记。您需要做的是将表单标记放在母版页中,并且在使用maaster页面的任何页面中都没有表单标记。我将ScriptManager放在母版页中表单标记的正下方,因为所有使用母版页的页面都会看到它。您的搜索功能必须位于表单标签内,并且不能有自己的表单标签,它将使用母版页中的表单。使用更新面板,您可以隔离搜索文本框和按钮,并在代码中执行任何您想执行的操作,例如重定向到搜索结果页或类似的操作。

自从我放弃使用ScriptManager以来,这个问题变得毫无意义。我已经能够让ExtJS直接发布到我的[WebMethod],而不必依赖任何额外的微软开销。我不知道为什么已经在使用ExtJs或jQuery这样的好javascript库的人会选择ScriptManager路线访问所有[WebMethod]。您当然不需要它,它只是将您锁定在使用与您的应用程序无关的标签的特定要求中。

谢谢普雷斯科特。我刚刚发现了一个视频,我认为这是一个更干净的架构。我不知道您在*.aspx页面中设置的任何[WebMethod]方法都可以通过简单的URL访问。我肯定我可以用提琴手算出。所以,现在我计划直接使用我的AJAX库ExtJs调用[WebMethod],摆脱微软为简单调用web方法而增加的所有c-r-a-p开销!脚本管理器、脚本代理、浪费的表单等等!好奇的是,如果它们是静态的web方法,为什么不将它们分解成自己的服务呢?我以为你需要整页的回发和查看状态。很高兴你找到了一个很好的解决方案,尽管我已经有了一个完整的RESTAPI和OData和EF4.0,顺便说一句,我喜欢它,它满足了我90%的AJAX需求。我对[WebMethod]的需求更多的是针对特定于页面的服务。我喜欢将服务代码与调用该服务的javascript封装在同一页面中。例如,在我的一个页面上,用户按下一个按钮,通过AJAX将任务提交到队列。这个小小的请求与我的数据模型无关,也不是站点范围的特性。我只是简单地制作了一个快速的[WebMethod],添加了一些javascript,一切都很好!