2013-02-14 4 views
2
     <%@ Page Language="C#" MasterPageFile="~/MasterPage.master" AutoEventWireup="true" CodeFile="Default2.aspx.cs" Inherits="Default2" ClientIDMode="AutoID" %> 
         <asp:Content ID="Content1" ContentPlaceHolderID="head"  Runat="server"> 
         </asp:Content> 

         <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="server"> 

         <% 
         foreach (var item in AllSales) 
         { 
     //Here i have just set a breakpoint to see if it loops the AllSales list when I press the update button 
         } 
         %> 

         <asp:UpdatePanel runat="server" ID="UpdatePanel1"> 
         <ContentTemplate> 

         <p>Update Panel: DateTime.Now: <%= DateTime.Now.ToString() %></p> 
         <asp:Button runat="server" ID="Submit" Text="Update" /> 

         </ContentTemplate> 

         </asp:UpdatePanel> 

         </asp:Content> 

Сценария кода менеджера в Masterpage:UpdatePanel обновления всей страницы, а не только в ContentTemplate

<asp:ScriptManager ID="ScriptManager1" runat="server" /> 

    <asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server"> 

    </asp:ContentPlaceHolder> 

Проблема здесь в том, что каждый раз, когда я нажимаю на кнопку Update он загружает страницу снова и петля " AllSales ", я хочу только обновить раздел и не выполнять ненужные циклы.

Вот забавная часть: Если я удаляю главную страницу, она работает! Но с мастер-страницей это не так, почему ?!

+0

пользователь Runat сервер с входом управления вместо пользователя жерех: Кнопка управления – skhurams

ответ

0

Я попытался воссоздать вашу проблему, но он отлично работает в моем случае. Попробуйте создать новый файл .aspx и вставьте следующее:

<!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></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <p>Outside UpdatePanel</p> 
     <asp:ScriptManager runat="server" ID="ScriptManager1"> 
     </asp:ScriptManager> 
     <asp:UpdatePanel runat="server" ID="UpdatePanel1"> 
      <ContentTemplate> 
       <p>DateTime.Now: <%= DateTime.Now.ToString() %></p> 
       <asp:Button runat="server" ID="SubmitButton" Text="Go" /> 
      </ContentTemplate> 
     </asp:UpdatePanel> 
    </div> 
    </form> 
</body> 
</html> 

Это был протестирован в VS2010 с .NET 4.0 в пустой веб-приложения. Это работает и для вас? Я попробовал тот же пример, используя главную страницу с заполнителем содержимого. Это дает одинаковые (правильно работающие) результаты. Из этого я понимаю, что на вашей странице происходит что-то еще, что нам не хватает. Здесь?

[Редактировать]

Я сделал еще один простой пример, на этот раз с мастер-страницы и содержимого страницы.

Мастер-страница:

<!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></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 
     <asp:ScriptManager runat="server" ID="ScriptManager1"></asp:ScriptManager> 
     <p>Master Page: DateTime.Now: <%= DateTime.Now.ToString() %></p> 
     <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server"></asp:ContentPlaceHolder> 
    </div> 
    </form> 
</body> 
</html> 

Aspx страница:

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> 
<asp:UpdatePanel runat="server" ID="UpdatePanel1"> 
<ContentTemplate> 
<p>Update Panel: DateTime.Now: <%= DateTime.Now.ToString() %></p> 
<asp:Button runat="server" ID="Submit" Text="Update" /> 
</ContentTemplate> 
</asp:UpdatePanel> 
</asp:Content> 

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

В .Net 3.5 и это будет Работа. Однако в более низких версиях этого не произойдет. Боюсь, я не смог понять, как исправить это в более низких версиях. :(

+0

Это самый близкий из них, и он почти сработал. Когда я пробовал свой код, он работал отлично, но когда я добавил страницу aspx на главную страницу, она не удалась. есть что-то на главной странице, которая не правильна? Думаете? – syncis

+0

При добавлении ее на главную страницу мне пришлось удалить скриптмена и форму из вашего кода, потому что я их в masterpagem, но там он не работал. – syncis

+0

Я обновил свой ответ другим тест, пожалуйста, проверьте его. Также: какие рамки вы используете для таргетинга? Как выглядит остальная страница вашей главной страницы? – Korijn

2

Установите свойство UpdateMode в условное. Значение по умолчанию для UpdateMode является Always, если свойство UpdateMode установлено значение Always, содержимое элемента управления UpdatePanel обновляется на каждом постбэка, что берет свое начало из любого места на странице, reference

Edit: Вы используете тип ввода =» submit ", который, вероятно, вызывает сообщение, замените его asp: Button, чтобы заставить вызов ajax работать.

+0

Я думаю, что у вас есть misuderstood ОП. Я предполагаю, что он жалуется на полную обратную передачу (с мерцающей страницей), хотя submit-buttton находится внутри элемента управления UpdatePanel. –

+0

Вы правы @TimSchmelter, спасибо. – Adil

2

Причина такого поведения заключается в том, что вы используете кнопку простого html submit вместо кнопки сервера ASP.NET. Таким образом, страница, отправленная на сервер без использования ASP.NET Ajax. Заменить ActivitySubmit кнопка с asp: Управление кнопками

+0

Я добавил кнопку asp, но она по-прежнему обновляла все элементы управления страницами, а не только обновляемые панели. Возможно, я поставил кнопку в неправильном месте или что-то еще? – syncis

+0

@syncis Показать разметку элемента управления ScriptManager –

+0

Проверить мое редактирование: syncis

3

Для запуска обновления необходимо использовать серверный элемент управления, а не обычную кнопку ввода html. Попытайтесь использовать:

<asp:Button ID="ActivitySubmit" Text="Submit" runat="server" /> 
+0

Я попытался добавить это, не работал :(, сделал то же самое, это перезагрузили все на странице, а не только элементы управления обновлениями. – syncis

1

Я тестировал один и тот же код только с изменением типа кнопки, и он обновляет содержимое панели обновлений. Проблема заключается в том, что ваш сайт нацелен на .NET 3.0, но вам нужно настроить таргетинг как минимум на 3,5. Я тестировал на 3.0, он не работает, но на 3.5 и 4.0, он отлично работает. Таким образом, более легкое и безопасное решение нацелено на 3,5 года. Но если вы хотите использовать .NET 3.0, я попытаюсь найти обходной путь. Пожалуйста, дайте мне знать.

0

В вашем Page теге просто добавьте

ClientIDMode="AutoID" 
+0

Пожалуйста, см. Мой главный пост, я добавил, что на страницу, но все еще не работал. – syncis

+0

@syncis вы можете сделать одну вещь, просто поделитесь своим кодом, чтобы я мог проверить, как я тестирую с моего конца, его работу. и если я удалю 'ClientIDMode =" AutoID "' from 'Page', он не работает. Поделитесь своим кодом – vikas

+0

Хорошо проверите главный пост, проблема в том, что если я удалю мастер-страницу, это сработает, с masterpage он не работает. Я добавил clientIDMode в нужное место? – syncis

0

Я думаю, вы можете попробовать и поставить форму внутри UpdatePanel, или вы можете попытаться изменить ребенок в качестве триггеров свойства UpdatePanel так:

<asp:UpdatePanel runat="server" ID="UpdatePanel1" ChildrenAsTriggers="False"> 

, а затем добавить кнопку, как спусковой крючок, как это

ScriptManager.GetCurrent(Page).RegisterAsyncPostBackControl(SubmitButton); 
0

попробовать addind эту часть к вашему UpdatePanel:

<Triggers> 
    <asp:AsyncPostBackTrigger ControlID="Submit" /> 
    </Triggers> 
Смежные вопросы