【问题标题】:How can my button close the window and refresh the parent after updating formview?更新formview后,我的按钮如何关闭窗口并刷新父级?
【发布时间】:2010-08-19 20:50:40
【问题描述】:

我在设置了 CommandName="Update" 的 FormView 上有一个“保存”按钮。此按钮更新绑定到 FormView 的 EntityDataSource。

EDS 更新后,我想关闭这个(子,弹出)窗口并刷新我的父窗口(这样它就会反映刚刚对数据所做的更改)。

作为参考,我在这个页面上有一个类似的“取消”按钮,它只是调用一个 Javascript 函数“OnClientClick”:

function done() {
   if (window.opener.closed) {
      self.close();
   } else {
      window.opener.focus();
      window.opener.location.href = opener.location;
      self.close();
   }
}

现在,我怎样才能让 FormView 和 EDS 做它的事情(处理更新命令),然后调用这个 javascript 函数(或代码来完成等效)???

在进行了更多挖掘之后,我解决了它。问题与 FormView 位于更新面板内有关。我必须使用以下内容:

ScriptManager.RegisterClientScriptBlock(this.UpdatePanel1, typeof(string), "done", "done();", true);

【问题讨论】:

  • 是模态对话框吗?我会担心跨浏览器兼容。
  • 不,只是一个 aspx 页面。它只需要与 IE 一起工作,这是在我移植到 .Net 的 JSP Web 服务器上运行的代码。该脚本多年来一直为我们的用户工作,没有任何问题。我只需要弄清楚如何从后面的代码中调用它(或完成同样的事情)。 :)

标签: javascript asp.net entity-framework gridview formview


【解决方案1】:

一旦您的更新完成,它应该会返回一个页面,您可以在其中注册您的函数。在您的 Update 命令处理程序中(假设这发生在服务器端),只需添加以下内容:

Page.RegisterStartupScript("AfterUpdate", "done();");

它将导致done() javascript函数在windows从update命令引起的回发刷新时立即运行。如果您的 done 函数不在页面中,请确保在将其调用到 RegisterStartupScript 调用之前添加它的定义。

【讨论】:

  • 我正在使用绑定到 FormView 的 EntityDataSource,但我没有特定的命令处理程序。但是,我确实有一个“OnUpdated”处理程序。我已尝试将其添加到此处理程序中,并且已尝试在保存按钮上为单击事件添加处理程序并将其放入其中。 “完成”功能位于母版页中。我还尝试将实际的 javascript 代码放在 RegisterStartupScript 中,而不是调用“完成”。也许只是.Net版本的不同,但我使用的代码是:ClientScript.RegisterStartupScript(GetType(), "Javascript", "javascript: done(); ", true);
  • 在进行了更多挖掘之后,我解决了它。问题与 FormView 位于更新面板内有关。我必须使用以下内容:ScriptManager.RegisterClientScriptBlock(this.UpdatePanel1, typeof(string), "done", "done();", true);
  • @Shayne 如果此答案对您有所帮助,请不要忘记设置已接受的答案,以免其他人也尝试回答。您还可以获得 2 个代表点来设置接受的答案:)
猜你喜欢
  • 2012-07-09
  • 1970-01-01
  • 1970-01-01
  • 2016-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多