Ext.Net,加载2个子页面,从一个孩子到另一个孩子

时间:2013-07-16 06:52:16

标签: asp.net ext.net

我的main.aspx

    <ext:ResourceManager ID="ResourceManager1" runat="server" Theme="Gray" />
    <form id="form2" runat="server">
    <ext:Panel runat="server" ID="anaPanel" Title="OSO" Icon="Car">
        <TopBar>
            <ext:Toolbar runat="server" Layout="FitLayout">
                <Items>
                    <ext:Menu ID="Menu1" runat="server" Floating="false" Layout="HBoxLayout" ShowSeparator="false"
                        AnimCollapse="true" Cls="horizontal-menu">
                        <Defaults>
                            <ext:Parameter Name="MenuAlign" Value="tl-bl?" Mode="Value" />
                        </Defaults>
                        <Items>
                            <ext:MenuItem ID="MenuItem1" runat="server" Text="" Icon="Group">
                                <Menu>
                                    <ext:Menu ID="Menu2" runat="server">
                                        <Items>
                                            <ext:MenuItem Text="new card" Icon="GroupAdd">
                                           <DirectEvents>
                                           <Click OnEvent="AddNewCart_Click"></Click>
                                           </DirectEvents>

                                            </ext:MenuItem>
                                            ...............
                                            ...............
                                            </ext:Panel>

    </form>

我的maninpage代码背后有这样的东西。

 protected void AddNewCart_Click(object sender, DirectEventArgs e)
    {

        string path = "Pages/Kart.aspx";
        Window win = CreateWindows(MyWindow,Icon.Group,path,"new card", 420, 500);
        //  private Window CreateWindow(string Id, Icon ic, string path, string Title, int Heigh, int width){......};
       //I get the new Window and pass some values and turn it back.
        win.Render(this.Form);
        win.Show();
    }
在Kart.aspx内部还有一个按钮,当点击按钮时,加载第二个子页面就像上面的代码一样 但改变了路径(假设加载B.aspx)。我这样做就像window.parent.App.direct.MethodName()。 * [MethodName()在main.aspx中描述]但我需要刷新Kart.aspx中的网格,当时来自B.aspx的新项目, *我试图像这个window.parent.App.direct.MethodName()一样到达Kart.aspx方法,但似乎不起作用。只有在main.aspx代码隐藏中描述它才有效。  一位朋友告诉我,只有这样才能使用javascript“喜欢这个

代码隐藏

X.Call("ReloadGrid");

 function ReloadGrid() {
            var grid = window.parent.Ext.getCmp('GridId');
            //grid reloading code
}

但我不知道我是如何通过这个脚本重新加载网格的。还有另一种方法可以做到这一点。谢谢你

我的Kart.aspx;

<ext:GridPanel runat="server" ID="grid1" Title="" Height="460"
                Flex="1" Scroll="Vertical">
                <Store>
                    <ext:Store ID="strKart" runat="server">
                        <Model>
                            <ext:Model ID="Model1" runat="server" IDProperty="Id">
                                <Fields>
                                    <ext:ModelField Name="Id" />
                                    <ext:ModelField Name="name" />
                                    <ext:ModelField Name="surname" />


                                </Fields>
                            </ext:Model>
                        </Model>
                        <Listeners>
                            <Exception Handler="Ext.Msg.alert('Products - Load failed', operation.getError());" />
                        </Listeners>
                    </ext:Store>
                </Store>

及其背后的代码

 [DirectMethod]
        public void ReloadKart()
        {

            this.strKart.DataSource = cari_bll.GetAll();
            this.strKart.DataBind();
        }

**试图从B.aspx运行ReloadKart()函数,点击按钮

1 个答案:

答案 0 :(得分:1)

现在您有3个页面,父级可以将其称为 Parent.aspx ,子级 Kart.aspx b.aspx

您希望根据 b.aspx 中的事件 Kart.aspx 中加载网格

因为您通过调用直接方法加载网格

    [DirectMethod]
    public void ReloadKart()
    {    
        this.strKart.DataSource = cari_bll.GetAll();
        this.strKart.DataBind();
    }

归结为在 Kart.aspx

中调用此方法

要实现此目的,您需要执行以下操作:

  1. Kart.aspx 中定义一个调用直接方法ReloadKart的JavaScript方法,让它命名为ReloadGrid

    function ReloadGrid()
    {
        App.direct.ReloadKart();
    }
    
  2. Parent.aspx 中定义此方法的委托,让我们称之为ReloadGridDelegate,调用该委托CallKartReloadGrid的方法,以及设置方法它SetReloadGridDelegate

    var ReloadGridDelegate;
    function CallKartReloadGrid()
    {
        ReloadGridDelegate();
    }
    function SetReloadGridDelegate(delegate)
    {
        ReloadGridDelegate = delegate;
    }
    
  3. Kart.aspx 中分配调用SetReloadGridDelegate

    window.parent.SetReloadGridDelegate(ReloadGrid);
    
  4. 最后在 b.aspx 中调用父方法

    window.parent.CallKartReloadGrid();