C# 如何使弹出窗口的内容仅在';s出现了

C# 如何使弹出窗口的内容仅在';s出现了,c#,asp.net,postback,C#,Asp.net,Postback,我有一个用户控件,它通过一个SimpleModal弹出窗口(JQuery)显示,这个用户控件从数据库获取一些数据并显示它们(记录的详细信息) 问题在于,即使父页面是隐藏的,该用户控件也会在每次回发时来回获取数据 我想知道我是否能让它只有在弹出窗口出现时才能获取数据 我试图用falseforVisible属性将其放入面板中,并在打开弹出窗口时将其更改为true,但它仍然调用从数据库获取数据的页面加载 任何想法 当用户激活弹出窗口并用从请求中检索到的值填充弹出窗口时,发出ajax请求。当用户激活弹出

我有一个用户控件,它通过一个
SimpleModal
弹出窗口(JQuery)显示,这个用户控件从数据库获取一些数据并显示它们(记录的详细信息)

问题在于,即使父页面是隐藏的,该用户控件也会在每次回发时来回获取数据

我想知道我是否能让它只有在弹出窗口出现时才能获取数据

我试图用
false
for
Visible
属性将其放入
面板中,并在打开弹出窗口时将其更改为
true
,但它仍然调用从数据库获取数据的页面加载


任何想法

当用户激活弹出窗口并用从请求中检索到的值填充弹出窗口时,发出ajax请求。

当用户激活弹出窗口并用从请求中检索到的值填充弹出窗口时,发出ajax请求。

有几种方法可以解决此问题

1.在服务器端执行所有操作。 您可以使用ajax(以前的atlas)工具包的模态dilog。将其放入更新面板中。创建一个触发器,并在该触发器中指定事件-这将是您调用db的时间。它只会发生一次,你可以控制你想做什么

二,。使用客户端ajax。 我喜欢这种方式,因为使用UpdatePanel(性能)会带来很多开销。 保持jQueryUI模式对话框的灵活性,在打开时使用客户端事件将其挂钩。然后,您必须对Web服务执行.ajax调用(可以托管在aspx页面中),或者执行.get:

    $.ajax({
      url: url,
      data: data,
      success: success,
      dataType: dataType
    });

然后,您的aspx页面可以简单地:

Write(MyRepository.GetDetail(q=>q.ID==1234.ToString()); Resonse.End()

当然,如果您只需要在模式对话框中以简单字符串的形式显示该数据,而不需要在业务端检查对象,就可以这样做

这里详细描述了这两种api:

现在,如果您确实想要对从db检索的细节记录进行自定义,那么您可能需要研究使用getJSON。 更多示例如下:


有几种方法可以解决这个问题

1.在服务器端执行所有操作。 您可以使用ajax(以前的atlas)工具包的模态dilog。将其放入更新面板中。创建一个触发器,并在该触发器中指定事件-这将是您调用db的时间。它只会发生一次,你可以控制你想做什么

二,。使用客户端ajax。 我喜欢这种方式,因为使用UpdatePanel(性能)会带来很多开销。 保持jQueryUI模式对话框的灵活性,在打开时使用客户端事件将其挂钩。然后,您必须对Web服务执行.ajax调用(可以托管在aspx页面中),或者执行.get:

    $.ajax({
      url: url,
      data: data,
      success: success,
      dataType: dataType
    });

然后,您的aspx页面可以简单地:

Write(MyRepository.GetDetail(q=>q.ID==1234.ToString()); Resonse.End()

当然,如果您只需要在模式对话框中以简单字符串的形式显示该数据,而不需要在业务端检查对象,就可以这样做

这里详细描述了这两种api:

现在,如果您确实想要对从db检索的细节记录进行自定义,那么您可能需要研究使用getJSON。 更多示例如下: