2011-04-15 55 views
2

我有一个“遗留”的ASP.NET网站,我想提高一点。我想要做的一件事就是更新页面 - 目前,它总是全面更新,但我想开始使用部分更新。UpdatePanel和主页面中的两个内容占位符区域

我一直希望能够使用ASP.NET UpdatePanel这个 - 但我有点卡住如何让这个为我工作。

我有一个母版页,其定义了一些内容占位符 - 简化它看起来像这样:

<%@ Master Language="C#" AutoEventWireup="true" CodeFile="Default.master.cs" Inherits="WebForms_Default" %> 
<?xml version="1.0" encoding="utf-8" ?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title>MyTitle</title> 
</head> 
<body> 
    <form id="myForm" runat="server"> 
     <asp:ScriptManager ID="smgrMaster" runat="server" LoadScriptsBeforeUI="true"> 
     <Scripts> 
      <asp:ScriptReference Path="~/Scripts/jquery-1.4.2.min.js" /> 
     </Scripts> 
     </asp:ScriptManager> 
     <asp:ContentPlaceHolder runat="server" ID="cphSearch" /> 
     <asp:ContentPlaceHolder runat="server" ID="cphContent" /> 
    </form> 
</body> 
</html> 

在我的内容页,我的网格显示cphContent区域内的数据 - 在我cphSearch区我有一些输入控件 - 一个RadioButtonList和两个DropDowns。只要这些控件中的某些内容发生更改,现在就会发布回发(它们有AutoPostback="true"集)。

我的问题是:我怎么告诉我UpdatePanel(这我想在我的包裹格在cphContent区)为“监听”从cphSearch这三个控件回发?

<asp:UpdatePanel> 
    <ContentTemplate> 
     <asp:GridView> 
     // grid view defined here 
     </asp:GridView> 
    </ContentTemplate> 
    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID=".. what values to put here?? .." /> 
     <asp:PostBackTrigger ControlID=".. - what values to put here?? .." /> 
    </Triggers> 

当我加我<asp:UpdatePanel>,我得到一个部分<Triggers>,但在cphSearch内容区域的控制是不可见的,所以我想我不能真正增加他们作为UPDATE触发器,正确?

要么我完全没有得到它(绝对有可能!),要么我错过了一个明显的步骤/诀窍让它起作用 - 否则它是不可能的。让我知道!

回答

2

我认为它没有必要把Triggers当你不能够找到控制Triggers一些事件只是使用的UpdatePanel所有的时间不triggers

<asp:Content ID="Content1" ContentPlaceHolderID="cphSearch" runat="Server"> 
    <asp:UpdatePanel ID="updateSearch" runat="server"> 
    <ContentTemplate> 
     your searching controls 
    </ContentTemplate> 
    </asp:UpdatePanel> 
</asp:Content> 
<asp:Content ID="Content2" ContentPlaceHolderID="cphContent" runat="Server"> 
    <asp:UpdatePanel ID="updateContent" runat="server"> 
    <ContentTemplate> 
     your grid 
    </ContentTemplate> 
    </asp:UpdatePanel> 
</asp:Content> 

这将更新整个电网,搜索控件,它会也处理AutoPostBack事件,但DENT忘记把更新<asp:UpdateProgress>控制看到工作正在进行中...

+0

不知道为什么 - 但这似乎工作 - 谢谢!我始终觉得你不得不告诉UpdatePanel哪些事件会触发部分页面更新...... – 2011-04-18 07:12:13

0

从这些信息,我假设你有MasterPage上的搜索控件是所有页面通用的。一种方法是从您的母版页公开事件并在您的内容页面上处理它。检查this

当您的DDL selectedIndexChanged事件引发此事件时。在contentPage上的这个事件的处理程序中,您可以调用updateContent.Update()。

我认为解决方案存在于这些方面。

+0

不完全 - 这些搜索控件依赖于显示的内容 - 它们在ContentPlaceHolder(在母版页中定义)内部, - 但它们在母版页上不是**而不是**(对于所有内容页面它们也不一样) – 2011-04-15 21:02:36

+0

因此,您的GV和搜索控件是您所指的相同内容页的一部分?我没有清晰的图像。你能否更新包含搜索控制的代码? – gbs 2011-04-15 21:09:15

+0

否 - 搜索控件位于一个文件中,并放置在“cphSearch”容器中,而gridview位于另一个文件中,并放置在“cphContent”容器 – 2011-04-16 08:00:46