我的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()函数,点击按钮
答案 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
中调用此方法要实现此目的,您需要执行以下操作:
在 Kart.aspx 中定义一个调用直接方法ReloadKart
的JavaScript方法,让它命名为ReloadGrid
function ReloadGrid()
{
App.direct.ReloadKart();
}
在 Parent.aspx 中定义此方法的委托,让我们称之为ReloadGridDelegate
,调用该委托CallKartReloadGrid
的方法,以及设置方法它SetReloadGridDelegate
var ReloadGridDelegate;
function CallKartReloadGrid()
{
ReloadGridDelegate();
}
function SetReloadGridDelegate(delegate)
{
ReloadGridDelegate = delegate;
}
在 Kart.aspx 中分配调用SetReloadGridDelegate
window.parent.SetReloadGridDelegate(ReloadGrid);
最后在 b.aspx 中调用父方法
window.parent.CallKartReloadGrid();