使用多个ScriptManagers

时间:2010-12-10 21:47:19

标签: 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
    {
        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'标签,那么如何在我的母版页中管理我需要的其他表单呢?就像我的小表单将我的搜索功能包装在页面顶部一样?

由于

3 个答案:

答案 0 :(得分:0)

主页上的ScriptManager就足够了(表单标签中的是)。继承master的页面,放置一个scriptmanagerproxy控件。

我认为通常人们使用一个表单标签,然后对于表单按钮,回发会处理适当的操作 - 比如重定向到搜索页面。我不是这种方法的粉丝,为什么当你只想重定向到带有查询字符串的搜索页面时处理回发。我已经使用过javascript来解决它,或者点击按钮点击将表单操作更改为适当的任何内容,或者只是覆盖提交按钮类型,并使用javascript构建新的url并更改位置栏

答案 1 :(得分:0)

在ASP.Net中,您只能有一个表单标记。您需要做的是将表单标记放在母版页中,并且在使用该页面的任何页面中都没有表单标记。我将ScriptManager放在主页面中的表单标记正下方,因为所有页面都会使用母版页看到它。您的搜索功能必须位于表单标记内,并且不能拥有自己的表单标记,它将使用母版页中的表单。使用更新面板,您可以隔离搜索文本框和按钮,并在后面的代码中执行任何操作,例如重定向到搜索结果页面或类似的内容。

答案 2 :(得分:0)

自从我放弃使用ScriptManager以来,这个问题已经没有实际意义了。我已经能够让ExtJS直接发布到我的[WebMethod],而不必依赖任何额外的Microsoft开销。我不确定为什么那些已经使用好的javascript库(如ExtJs或jQuery)的人会将ScriptManager路由到所有[WebMethod]。您当然不需要它,它只会锁定您使用与您的应用程序无关的标签的特定要求。