我需要帮助,可能有点复杂。我调用了一个从js文件中做一些事情的WebMethod。它所做的一件事是,它调用位于app_code中的类中的一些函数。
在app_code中的那个类中,我得到了一个位于我页面上的GridView控件,我需要更新它,所以我这样做:
ActiveGridView.DataSource = (ActiveDataTable).DefaultView;
ActiveGridView.DataBind();
当我从常规函数调用app_code中的函数时,上述工作正常,但是当我在WebMethod中调用它时不会更新网格。
任何想法如何解决这个问题?
请注意,我不能让WebMethod返回数据,然后在客户端更新网格。
被修改
实际上我使用的是updatePanel,我的aspx代码如下所示:
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:GridView ID="MappedDataGrid" runat="server" CssClass="pipesTbl">
</asp:GridView>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnRemove" EventName="Click" />
</Triggers>
</asp:UpdatePanel>
当我从页面上的一个事件调用填充网格时再次这样工作正常,但是当我在webMethods调用app_code中的类来调用它时,配偶填充网格,它不会被重新填充。 再次编辑
我认为问题在于这一行:
<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnRemove" EventName="Click" />
</Triggers>
我尝试将其更改为:
<Triggers>
<asp:AsyncPostBackTrigger ControlID="MappedDataGrid" EventName="DataBinding" />
</Triggers>
但是没有用,我可能会遗漏一些东西,因为这对我来说都是新手,我不知道该怎么办。
为了让它像你说的那样工作,我现在应该做些什么?
答案 0 :(得分:1)
当您调用WebMethod时,实际上并未加载页面并在页面生命周期中运行。即使您的方法是您的页面代码隐藏类的一部分,当您以这种方式调用它时,页面上的控件将无法使用。它只是从页面类中的方法中创建Web服务的快捷方式。
根据您的意愿,您可能希望使用UpdatePanel。有了它们,它实际上是对页面进行完整的回发,您可以更改页面控件所需的任何内容。
<强>更新强>
UpdatePanel的要点是将不再使用您的WebMethod 。您只需单击作为更新面板触发器的普通按钮,您将在后面的代码中正常更新网格(处理按钮的单击事件并调用代码绑定网格)。由于只有网格在面板中,因此只会在屏幕上刷新。
答案 1 :(得分:1)
如果您调用的方法在该页面的生命周期之外操作ASP.NET页面,则不会查看结果。如果要将数据绑定到ASP.NET控件,它需要位于页面的生命周期中,如果您通过webmethod从javascript调用该方法,那么该方法将在生命周期之外执行。
尝试使用AJAX将数据嵌入到UpdatePanel中来填充数据网格。