UpdatePanel и две области заполнителя содержимого с главной страницы - PullRequest
2 голосов
/ 15 апреля 2011

У меня есть «устаревший» сайт ASP.NET, который я хотел бы немного улучшить. Одна область, в которой я хотел бы кое-что сделать, - это обновление страницы - сейчас это всегда полные обновления страницы, но я бы хотел начать использовать частичные обновления.

Я надеялся, что смогу использовать для этого 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 есть несколько элементов управления вводом - a 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 не видны, так что я не могу добавить их в качестве триггеров обновления, верно?

Либо я совершенно не понимаю (абсолютно возможно!), Либо я упускаю очевидный шаг / трюк, чтобы заставить это работать - или это просто невозможно. Дайте мне знать!

Ответы [ 2 ]

2 голосов
/ 15 апреля 2011

я думаю, что нет необходимости ставить Triggers все время, когда вы не можете найти элемент управления для Triggers, какое-то событие просто использует панель обновления без 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, но не забудьте поставить элемент управления Update <asp:UpdateProgress>, чтобы увидеть, что работа идет ...

0 голосов
/ 16 апреля 2011

Исходя из информации, я предполагаю, что у вас есть элементы управления поиском на MasterPage, общие для всех страниц.Одним из способов было бы выставить событие на главной странице и обработать его на своей странице содержимого.Отметьте this .

После вашего события DDL selectedIndexChanged вы вызываете это событие.Внутри обработчика этого события на contentPage вы вызываете updateContent.Update ().

Я думаю, что решение лежит где-то в этом направлении.

...