none
Странное поведние UpdatePanel RRS feed

  • Вопрос

  • делаю сайт, и на некоторых страницах не понимаю поведение апдейтпанели.

    проблема в "прыгании страницы" - т.е. при пролистывании вниз и выборе чеголибо (другой карты или страны/марки/модели) страница обновляется прокручиваясь на начало вверх

    http://92.248.158.46/Orders/OrderWorks.aspx

    суть: карты обернуты в апдейтпанель, выбор страны/марки/модели/ обоернуты в другую апдейпанель. обе без параметров, только рунат и ИД (даже если находятся в одной поведение аналогичное). НО выбор карты не прокручивает страницу вверх, а выбор страны/марки/модели/ - прокручивает вверх! на выборе страны/марки есть c# код обновляющий подчиненный список, но на выборе модели onclick="lnkModel_Click" пустой, там ничего не происходит, но страница все равно прыгает вверх, что я не заметил?

    20 сентября 2012 г. 14:28

Ответы

  • Я про Вас ещё не забыл, просто всё времени не было. Иногда бываю невнимательным, поэтому сразу не заметил что там у Вас LinkButton, поэтому в репитере надо вешать один UpdatePanel на каждый линк, это веб-формы ничего не поделаешь, или используйте другой контрол, например ImageButton. Или ещё лучше jQuery, чтобы уйти от этих абстракций, но для данного случая это будет ещё сложнее, так как это веб-формы. А вот Ваш проект частично собранный из кусков, всё работает, теги в некоторых местах были неправильно вложены. Остальное думаю доделаете сами.

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="tmpControl.ascx.cs"
      Inherits="WebApplicationAjax.R_Anonimous.tmpControl" %>
    <asp:UpdatePanel runat="server" ID="up" UpdateMode="Conditional">
      <ContentTemplate>
        <table border="0" cellpadding="0" cellspacing="0" style="margin: 10px auto 20px auto;
          width: 100%; padding: 0">
          <asp:Repeater runat="server" ID="rptCards">
            <ItemTemplate>
              <tr>
                <td>
                  <asp:ImageButton runat="server" ID="ibCard" OnClick="ibCard_Click" Style="" CommandArgument='<%# Eval("CardType") %>'
                    ImageUrl='<%# "~/" + Eval("CardTypeImageFileName") %>' /><br />
                </td>
              </tr>
            </ItemTemplate>
          </asp:Repeater>
          <asp:ObjectDataSource runat="server" ID="odsCards" SelectMethod="GetCardEnumList"
            TypeName="amBL.Cards"></asp:ObjectDataSource>
        </table>
      </ContentTemplate>
    </asp:UpdatePanel>
    <br />
    <table cellpadding="0" cellspacing="0" style="margin: 0px 10px; width: 90%;">
      <asp:Repeater runat="server" ID="rptCountry">
        <ItemTemplate>
          <tr>
            <td>
              <asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Conditional">
                <ContentTemplate>
                  <asp:LinkButton runat="server" ID="lnkCountry" ClientIDMode="Static" OnClick="lnkCountry_Click"
                    CommandArgument='<%#Eval("ID")%>' Text='<%# Eval("Name")%>' Width="20px">
                  </asp:LinkButton>
                  <asp:Label ID="CurrentTime" runat="server" Text='<%#DateTime.Now.ToString()%>'> ></asp:Label>
                </ContentTemplate>
                <Triggers>
                  <asp:AsyncPostBackTrigger ControlID="lnkCountry" />
                </Triggers>
              </asp:UpdatePanel>
            </td>
          </tr>
        </ItemTemplate>
      </asp:Repeater>
    </table>
    <asp:ObjectDataSource runat="server" ID="odsCountry" SelectMethod="GetCountrys" TypeName="amBL.Countrys">
      <SelectParameters>
        <asp:Parameter Name="flag" DefaultValue="" Type="String" />
      </SelectParameters>
    </asp:ObjectDataSource>

    • Помечено в качестве ответа YatajgaEditor 22 октября 2012 г. 19:23
    21 октября 2012 г. 20:02
    Модератор
  • "а почемы Вы решили что AJAX в принципе не работает?" -  я же видел разметку вашей страницы, как Вы выразились уже старой. А вот сейчас уже то поведение которое Вы описывали в самом начале, т.е. при выборе карт используется AJAX. Если хотите использовать независимое обновление частей страницы, то используйте это свойство, или же триггеры. Если всё правильно настроить, то работать будет, а без кода сказать что конкретно - трудно, может там у Вас простая опечатка или ещё что то.
    • Изменено YatajgaEditor 23 сентября 2012 г. 16:03
    • Предложено в качестве ответа YatajgaEditor 30 сентября 2012 г. 6:50
    • Помечено в качестве ответа YatajgaEditor 22 октября 2012 г. 19:22
    23 сентября 2012 г. 16:01
    Модератор

Все ответы

  • У Вас там AJAX в принципе не работает, видимо, что то сделали не так. Покажите код, если можно.
    20 сентября 2012 г. 18:52
    Модератор
  • Проверьте, подключен ли у вас ScriptManager
    22 сентября 2012 г. 22:16
  • Извиняюсь, что пропал, но бывает такое (

    да, и на момент вопроса там еще старый вариант в паблике был, сейчас обновил. раньше и при клике по дисконтной карте страница прыгала, и вопрос как бы был некорректен. 

    а почемы Вы решили что AJAX в принципе не работает? код конечно можно, но его не 20 строк и не 50 ))

    может чтото конкретней?

    23 сентября 2012 г. 15:43
  • подключен на мастерпейдже

    <%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="OrderWorks.aspx.cs" Inherits="Orders_OrderWorks" %>

    к странице прикручен мастерпейдж, а на ней

    <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnableScriptGlobalization="true" EnableScriptLocalization="true"></ajaxToolkit:ToolkitScriptManager>

    23 сентября 2012 г. 15:45
  • "а почемы Вы решили что AJAX в принципе не работает?" -  я же видел разметку вашей страницы, как Вы выразились уже старой. А вот сейчас уже то поведение которое Вы описывали в самом начале, т.е. при выборе карт используется AJAX. Если хотите использовать независимое обновление частей страницы, то используйте это свойство, или же триггеры. Если всё правильно настроить, то работать будет, а без кода сказать что конкретно - трудно, может там у Вас простая опечатка или ещё что то.
    • Изменено YatajgaEditor 23 сентября 2012 г. 16:03
    • Предложено в качестве ответа YatajgaEditor 30 сентября 2012 г. 6:50
    • Помечено в качестве ответа YatajgaEditor 22 октября 2012 г. 19:22
    23 сентября 2012 г. 16:01
    Модератор
  • UpdateMode и ChildrenAsTriggers поведение не меняют. Я согласен что без кода тут не разабраться, но не сюда же всю страницу кидать, может приват какой?

    вобщем упростил-переложил: есть страница, на ней юзерконтрол: (http://92.248.158.46/R_Anonimous/tmp.aspx)

    <%@ Page Title="" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="tmp.aspx.cs" Inherits="R_Anonimous_tmp" %>
    <%@ Register TagPrefix="uc" Src="~/R_Anonimous/tmpControl.ascx" TagName="tmpControl" %>
    
    <asp:Content ID="Content1" ContentPlaceHolderID="head" Runat="Server">
    <link href="../Styles/orders.css" rel="stylesheet" type="text/css" />
    </asp:Content>
    
    <asp:Content ID="Content2" ContentPlaceHolderID="main" Runat="Server">
    
    <uc:tmpControl runat="server" ID="owSelectCar" />
    
    </asp:Content>

    ------------------------------------ содержимое контрола --------------------------------------

    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="tmpControl.ascx.cs" Inherits="R_Anonimous_tmpControl" %>
    
    <asp:UpdatePanel runat="server" ID="up" >
    <ContentTemplate>
    
    <table border="0" cellpadding="0" cellspacing="0" style="margin:10px auto 20px auto; width:100%; padding:0">
    
    <asp:Repeater runat="server" ID="rptCards" DataSourceID="odsCards">
    <ItemTemplate>
    <tr><td <%# (int)Eval("CardType")!=SelectedCardType ? "" : "class=\"BlueOutsetBorder\"" %> >
    <asp:ImageButton runat="server" ID="ibCard" OnClick = "ibCard_Click" style="margin-
    CommandArgument='<%# Eval("CardType") %>' ImageUrl='<%# "~/" + Eval("CardTypeImageFileName") %>' /><br />
    </td></tr>
    </ItemTemplate>
    </asp:Repeater>
    
    <asp:ObjectDataSource runat="server" ID="odsCards" SelectMethod="GetCardEnumList" TypeName="amBL.Cards">
    </asp:ObjectDataSource>
    
    </table>
    <br />
    <table cellpadding="0" cellspacing="0" style="margin:0px 10px; width:90%;">
    
    <asp:Repeater runat="server" ID="rptCountry" DataSourceID="odsCountry">
    <ItemTemplate>
    <tr><td <%# (Int64)Eval("ID")!=SelectedCountry ? "class=\"VMenuCell\"" : "class=\"VMenuCellSelected\"" %> >
    <asp:LinkButton runat="server" ID="lnkCountry" onclick="lnkCountry_Click" Width="100%" CommandArgument='<%# Eval("ID") %>' ><%# Eval("Name")%></asp:LinkButton>
    </td></tr>
    </ItemTemplate>
    </asp:Repeater>
    
    </table>
    
    <asp:ObjectDataSource runat="server" ID="odsCountry" SelectMethod="GetCountrys" TypeName="amBL.Countrys">
    <SelectParameters>
    <asp:Parameter Name="flag" DefaultValue="" Type="String" />
    </SelectParameters>
    </asp:ObjectDataSource>
    
    </div>
    
    </ContentTemplate>
    </asp:UpdatePanel>


    ---------------- в кодбехайнде контрола две обработки кликов -----------------------

    protected Int64 SelectedCountry
    {
    get { return (ViewState["SelectedCountry"] != null && ViewState["SelectedCountry"].GetType() == typeof(Int64)) ? (Int64)ViewState["SelectedCountry"] : 0; }
    set { ViewState["SelectedCountry"] = value; }
    }
    public int SelectedCardType
    {
    get { return (ViewState["SelectedCardType"] != null && ViewState["SelectedCardType"].GetType() == typeof(int)) ? (int)ViewState["SelectedCardType"] : 0; }
    set { ViewState["SelectedCardType"] = value; }
    }
    
    protected void ibCard_Click(object sender, ImageClickEventArgs e)
    {
    ImageButton ib = (ImageButton)sender;
    SelectedCardType = int.Parse(ib.CommandArgument);
    rptCards.DataBind();
    }
    protected void lnkCountry_Click(object sender, EventArgs e)
    {
    LinkButton lnk = (LinkButton)sender;
    SelectedCountry = Int64.Parse(lnk.CommandArgument);
    rptCountry.DataBind();
    }

    по картам ходит нормально, по странам прыгает страница (


    • Изменено Acc4msdn 23 сентября 2012 г. 19:15
    23 сентября 2012 г. 16:27
  • Из вашего кода видно, что всё у Вас помещено в один UpdatePanel, разнесите их в несколько или используйте триггеры, как предложил высше.
    25 сентября 2012 г. 10:02
    Модератор
  • Пробовал разнести карты и страны по разным апдейтпанелям, ноль эффекта. чилдренастриггерс=тру, тоже не дает результата.

    а почему такой вариант то не работает? он жеж должен работать! в одной панели однотипные действа, но в одном случае работает, во втором нет.... как такто? 

    Что заставляет страницу так себя вести, чудес то не бывает?

    25 сентября 2012 г. 18:35
  • Решение которое я предложил высше должно работать. Просто, скорее всего, у Вас там получается что-то не так, иначе всё должно работать. А сказать что именно не имея кода очень сложно.

    Пожалуйста не бросайте топик без ответ, если проблема решена или всё ещё актуальна, отпишитесь.

    29 сентября 2012 г. 6:01
    Модератор
  • Проблема не решена, Ваше решение не работает, если б все было так просто я бы сюда не писал...

    того кода что я выложил недостаточно? я покажу и остальной, только помогите победить ) что именно еще показать?

    зы. спасибо что не бросили тему


    • Изменено Acc4msdn 2 октября 2012 г. 14:51
    2 октября 2012 г. 14:49
  • Ответ не всегда значит конкретная реализация, а общая идея тоже, если она верна. Если можете покажите код всей страницы и разметку (включая мастер страницу).
    2 октября 2012 г. 14:51
    Модератор
  • повторюсь, страница для разбора нынче http://92.248.158.46/R_Anonimous/tmp.aspx

    код страницы выше. полностью. кодбихайнд ее пустой, за исключением наследования от BasePage:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.IO;
    
    public partial class R_Anonimous_tmp : BasePage
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                //
            }
        }
    
        protected void ibDetail_Click(object sender, ImageClickEventArgs e)
        {
            //
        }
    }

    собственно BasePage:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using amClassFactory;
    
    public class BasePage: System.Web.UI.Page
    {
    
        private static scipCommonFunction.Log _log = new scipCommonFunction.Log();
    
    	public BasePage()
    	{
    		//
    	}
    
        
        protected override void OnPreInit(EventArgs e)
        {
            base.OnPreInit(e);
    
            if (string.IsNullOrEmpty(MasterPageFile)) return;
            if (GetAuthUser() == null) return;
    
            switch (GetAuthUser().Role.Name)
            {
                case CONST.ROLE_ADMIN:
                    MasterPageFile = "~/R_Admin/admin.master";
                    break;
                case CONST.ROLE_MASTER:
                    MasterPageFile = "~/R_Master/masster.master";
                    break;
                case CONST.ROLE_COLORER:
                    MasterPageFile = "~/R_Colorer/colorer.master";
                    break;
                case CONST.ROLE_WORKER:
                    MasterPageFile = "~/R_Worker/worker.master";
                    break;
                case CONST.ROLE_CLIENT_JUR:
                case CONST.ROLE_CLIENT_PHYS:
                    MasterPageFile = "~/R_Client/client.master";
                    break;
                default:
                    break;
            }
    
        }
        
    
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
            if (!Request.IsLocal)
                _log.LogVisit(string.Format("[{0}] {1}", Request.UserHostAddress, Page.User.Identity.Name.Length > 0 ? Page.User.Identity.Name : "{anonimous}"),
                                Request.UserAgent ?? "",
                                Request.Url.ToString(),
                                (IsPostBack ? "IPB; ": "") + (String.Join("•", Request.UserLanguages ?? new string[0])));
    
        }
    
        public void MessageBox(string text)
        {
            Response.Write("<script>alert('" + text + "');</script>");
        }
    
        public Int64 Log(int type, Int64 parentID, string text)
        {
            return _log.LogEvent(type, parentID, text);
        }
    
    
    
        public UserEx GetAuthUser()
        {
            if (!HttpContext.Current.User.Identity.IsAuthenticated)
                return null;
    
            if (HttpContext.Current.Cache["LoginUser"] != null)
                return (UserEx)HttpContext.Current.Cache["LoginUser"];
    
            amClassFactory.UserEx user = amBL.Users.GetUserEx(HttpContext.Current.User.Identity.Name);
            HttpContext.Current.Cache.Add("LoginUser", user, null, System.Web.Caching.Cache.NoAbsoluteExpiration, TimeSpan.FromHours(1), System.Web.Caching.CacheItemPriority.High, null);
            return user;
        }
    
    
    
    }
    amClassFactory - поставщик классов, amBL - бизнес-логика и scipCommonFunction - функции общего назначения, все проекты в солюшене. 

    2 октября 2012 г. 15:11
  • собственно весь мастерпейдж:

    <%@ Master Language="C#" AutoEventWireup="true" CodeFile="Site.master.cs" Inherits="SiteMaster" %>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head runat="server">
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
        <title></title>
        <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" />
        <link href="~/Styles/control.css" rel="stylesheet" type="text/css" />
        <link href="~/Styles/rounded.css" rel="stylesheet" type="text/css" />
        <link href="~/Styles/popupImage/any.css" rel="stylesheet" type="text/css" />
        <asp:ContentPlaceHolder ID="head" runat="server">
        </asp:ContentPlaceHolder>
    </head>
    <body>
        <form runat="server">
        <ajaxToolkit:ToolkitScriptManager ID="ToolkitScriptManager1" runat="server" EnableScriptGlobalization="true" EnableScriptLocalization="true"></ajaxToolkit:ToolkitScriptManager>
    
        <div id="divPage" class="page">
            <div id="divHeader" class="header">
                <div class="titleanonim">
                    <asp:LoginView ID="HeadLoginView" runat="server" EnableViewState="false" >
                        <AnonymousTemplate>
                            <asp:Login ID="LoginUser" runat="server" EnableViewState="false" RenderOuterTable="false" onloggedin="LoginUser_LoggedIn" de>
                                <LayoutTemplate>
                                        
                                    <asp:TextBox ID="UserName" runat="server" CssClass="textEntry" ToolTip="Введите имя пользователя"
                                        style="; top:22px; left:859px; width:117px; height:15px; border:none"></asp:TextBox>
                                    <asp:TextBox ID="Password" runat="server" CssClass="passwordEntry" TextMode="Password" ToolTip="Введите пароль"
                                        style="; top:50px; left:859px; width:117px; height:15px; border:none"></asp:TextBox>
                                    <asp:LinkButton ID="LoginButton" runat="server" CommandName="Login" EnableViewState="false" Text="_________" 
                                        style="margin:10px 0px 0px 20px; display:none;"></asp:LinkButton>
                                    <asp:ImageButton runat="server" ID="ibLogin" CommandName="Login" style="; top:79px; left:853px" ImageUrl="~/images/buttons/login.png" />
                                    <asp:LinkButton runat="server" EnableViewState="false" PostBackUrl="~/Account/Register.aspx"
                                        style="; top:110px; left:860px;; font-size: 8pt; font-weight:bolder;">Зарегистрироваться</asp:LinkButton>
                                    <asp:LinkButton runat="server" EnableViewState="false" PostBackUrl="~/Account/ChangePassword.aspx"
                                        style="margin-left:30px; font-size: 8pt; font-weight:bolder; display:none;">Забыли пароль?</asp:LinkButton><br />
                                        
                                    <span class="failureNotification">
                                        <asp:Literal ID="FailureText" runat="server"></asp:Literal>
                                    </span>
    
                                    <ajaxToolkit:TextBoxWatermarkExtender ID="tbw1" runat="server" WatermarkText="имя пользователя" TargetControlID="UserName" WatermarkCssClass="Watermark">
                                    </ajaxToolkit:TextBoxWatermarkExtender>
                                    <ajaxToolkit:TextBoxWatermarkExtender ID="tbw2" runat="server" WatermarkText="пароль" TargetControlID="Password" WatermarkCssClass="Watermark">
                                    </ajaxToolkit:TextBoxWatermarkExtender>
    
                                </LayoutTemplate>
                            </asp:Login>
                        </AnonymousTemplate>
                        <LoggedInTemplate>
                            Добро пожаловать <span class="bold"><asp:LoginName ID="HeadLoginName" runat="server" /></span>!
                            [ <asp:LoginStatus ID="HeadLoginStatus" runat="server" LogoutAction="Redirect" LogoutText="Выход" LogoutPageUrl="~/"/> ]
                        </LoggedInTemplate>
                    </asp:LoginView>
                </div>
                <div style="width:100%; background-color:white; clear:both; padding-top:5px; height:40px;"> 
                    <div style="float:left; padding-left:15px; font-size:0px;">
                        <asp:Image runat="server" ImageUrl="~/images/menu/leftcircle.png"  /></div>
                    <div style="float:left;">
                    <asp:Menu ID="Menu1" runat="server" CssClass="menu" EnableViewState="false" IncludeStyleBlock="false" Orientation="Horizontal">
                        <Items>
                            <asp:MenuItem NavigateUrl="~/Default.aspx" Text="Главная"/>
                            <asp:MenuItem NavigateUrl="~/Orders/Purchase.aspx" Text="Рассчет заказа"/>
                            <asp:MenuItem NavigateUrl="~/R_Anonimous/Spares.aspx" Text="Запчасти"/>
                            <asp:MenuItem NavigateUrl="~/R_Anonimous/Services.aspx" Text="Услуги"/>
                            <asp:MenuItem NavigateUrl="~/R_Anonimous/Works.aspx?6" Text="Фото работ"/>
                            <asp:MenuItem NavigateUrl="~/R_Anonimous/Info.aspx" Text="Справка"/>
                            <asp:MenuItem NavigateUrl="~/R_Anonimous/Contacts.aspx" Text="Контакты"/>
                        </Items>
                    </asp:Menu></div>
                    <div style="float:left; font-size:0px;">
                        <asp:Image ID="Image1" runat="server" ImageUrl="~/images/menu/rightcircle.png" BorderStyle="None" BorderWidth="0" />
                    </div>
                </div>
                <div id="divLeftUpMenu" >
                    <asp:LinkButton runat="server" ID="calc" Text="Рассчитать заказ" PostBackUrl="~/Orders/Purchase.aspx"></asp:LinkButton><br />
                    <asp:LinkButton runat="server" ID="spares" Text="Запасные части" PostBackUrl="~/R_Anonimous/Spares.aspx"></asp:LinkButton><br />
                    <asp:LinkButton runat="server" ID="works" Text="Наши работы" PostBackUrl="~/R_Anonimous/Works.aspx?6"></asp:LinkButton><br />
                    <asp:LinkButton runat="server" ID="info" Text="Справка" PostBackUrl="~/R_Anonimous/Info.aspx"></asp:LinkButton><br />
                    <asp:LinkButton runat="server" ID="contacts" Text="Контакты" PostBackUrl="~/R_Anonimous/Contacts.aspx"></asp:LinkButton>
                </div>
    
                <asp:LinkButton runat="server" ID="lnk1" PostBackUrl="~/R_Anonimous/Services.aspx?id=0" CssClass="headerPopupImageDevice" style="top:115px; left:210px;"></asp:LinkButton>
                <asp:LinkButton runat="server" ID="lnk2" PostBackUrl="~/R_Anonimous/Services.aspx?id=1" CssClass="headerPopupImageKuzov" style="top:92px; left:296px;"></asp:LinkButton>
                <asp:LinkButton runat="server" ID="lnk3" PostBackUrl="~/R_Anonimous/Services.aspx?id=2" CssClass="headerPopupImageSlesar" style="top:63px; left:373px;"></asp:LinkButton>
                <asp:LinkButton runat="server" ID="lnk4" PostBackUrl="~/R_Anonimous/Services.aspx?id=3" CssClass="headerPopupImagePaint" style="top:121px; left:426px;"></asp:LinkButton>
                <asp:LinkButton runat="server" ID="lnk5" PostBackUrl="~/R_Anonimous/Services.aspx?id=4" CssClass="headerPopupImageTone" style="top:62px; left:502px;"></asp:LinkButton>
                <asp:LinkButton runat="server" ID="lnk6" PostBackUrl="~/R_Anonimous/Services.aspx?id=5" CssClass="headerPopupImageColorer" style="top:124px; left:552px;"></asp:LinkButton>
                <asp:LinkButton runat="server" ID="lnk7" PostBackUrl="~/R_Anonimous/Services.aspx?id=6" CssClass="headerPopupImageBlock" style="top:91px; left:628px;"></asp:LinkButton>
                <asp:LinkButton runat="server" ID="lnk8" PostBackUrl="~/R_Anonimous/Services.aspx?id=7" CssClass="headerPopupImageSignal" style="top:134px; left:751px;"></asp:LinkButton>
    
    
    
            </div>
            <div id="divMain" class="main">
                <asp:ContentPlaceHolder ID="main" runat="server">
                </asp:ContentPlaceHolder>
            </div>
        </div>
        <div id="divFooter" class="footer">
            <span> © ООО "СКИП" 2011-2012</span>
        </div>
        </form>
    </body>
    </html>
    


    • Изменено Acc4msdn 2 октября 2012 г. 15:15
    2 октября 2012 г. 15:15
  • А разметка у Вас та, которую Вы привели в самом начале?
    4 октября 2012 г. 6:03
    Модератор
  • сама страница и контрол в ответе от 23 сентября 2012 г. 16:27
    4 октября 2012 г. 11:16
  • может натолкнет на какие мысли, всплыл еще такой аспект, если КАЖДЫЙ линкбатон с названием страны (ID="lnkCountry"), тот что в репитере (ID="rptCountry") обернуть в апдейтпанель, причем ЯВНО указать линкбатон как асинхронный триггер, то все работает ))) если явный триггер убрать, то независимо от ChildrenAsTriggers и  UpdateMode, сраница снова "прыгает"...
    <asp:Repeater runat="server" ID="rptCountry" DataSourceID="odsCountry">
    <ItemTemplate>
    <tr><td <%# (Int64)Eval("ID")!=SelectedCountry ? "class=\"VMenuCell\"" : "class=\"VMenuCellSelected\"" %> >
    <asp:UpdatePanel runat="server" ID="UpdatePanel1" >
    <ContentTemplate>
    <asp:LinkButton runat="server" ID="lnkCountry" onclick="lnkCountry_Click" Width="100%" CommandArgument='<%# Eval("ID") %>' ><%# Eval("Name")%></asp:LinkButton>

    </ContentTemplate>
    <Triggers>
    <asp:AsyncPostBackTrigger ControlID="lnkCountry" />
    </Triggers>
    </asp:UpdatePanel>


    </td></tr>
    </ItemTemplate>
    </asp:Repeater>
    Yatajga, есть какие мысли?
    8 октября 2012 г. 0:04
  • Я разобрал вашу страницу, там было много неправильных вложений контролов друг в друга, просто проект остался дома. Попробую довести его до ума и показать вам. А что касается вашей идеи, она не очень эффективная, хотя и рабочая. Если данных будет много размер страницы увеличится в разы.
    8 октября 2012 г. 6:17
    Модератор
  • Ну я и не говорил, что воспользуюсь таким способом, я понимаю, что это бред )

    А вот насчет неправильного вложения контролов Очень интересно, жду с нетерпением пояснений по данному направлению!

    8 октября 2012 г. 13:52
  • Я про Вас ещё не забыл, просто всё времени не было. Иногда бываю невнимательным, поэтому сразу не заметил что там у Вас LinkButton, поэтому в репитере надо вешать один UpdatePanel на каждый линк, это веб-формы ничего не поделаешь, или используйте другой контрол, например ImageButton. Или ещё лучше jQuery, чтобы уйти от этих абстракций, но для данного случая это будет ещё сложнее, так как это веб-формы. А вот Ваш проект частично собранный из кусков, всё работает, теги в некоторых местах были неправильно вложены. Остальное думаю доделаете сами.

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="tmpControl.ascx.cs"
      Inherits="WebApplicationAjax.R_Anonimous.tmpControl" %>
    <asp:UpdatePanel runat="server" ID="up" UpdateMode="Conditional">
      <ContentTemplate>
        <table border="0" cellpadding="0" cellspacing="0" style="margin: 10px auto 20px auto;
          width: 100%; padding: 0">
          <asp:Repeater runat="server" ID="rptCards">
            <ItemTemplate>
              <tr>
                <td>
                  <asp:ImageButton runat="server" ID="ibCard" OnClick="ibCard_Click" Style="" CommandArgument='<%# Eval("CardType") %>'
                    ImageUrl='<%# "~/" + Eval("CardTypeImageFileName") %>' /><br />
                </td>
              </tr>
            </ItemTemplate>
          </asp:Repeater>
          <asp:ObjectDataSource runat="server" ID="odsCards" SelectMethod="GetCardEnumList"
            TypeName="amBL.Cards"></asp:ObjectDataSource>
        </table>
      </ContentTemplate>
    </asp:UpdatePanel>
    <br />
    <table cellpadding="0" cellspacing="0" style="margin: 0px 10px; width: 90%;">
      <asp:Repeater runat="server" ID="rptCountry">
        <ItemTemplate>
          <tr>
            <td>
              <asp:UpdatePanel runat="server" ID="UpdatePanel1" UpdateMode="Conditional">
                <ContentTemplate>
                  <asp:LinkButton runat="server" ID="lnkCountry" ClientIDMode="Static" OnClick="lnkCountry_Click"
                    CommandArgument='<%#Eval("ID")%>' Text='<%# Eval("Name")%>' Width="20px">
                  </asp:LinkButton>
                  <asp:Label ID="CurrentTime" runat="server" Text='<%#DateTime.Now.ToString()%>'> ></asp:Label>
                </ContentTemplate>
                <Triggers>
                  <asp:AsyncPostBackTrigger ControlID="lnkCountry" />
                </Triggers>
              </asp:UpdatePanel>
            </td>
          </tr>
        </ItemTemplate>
      </asp:Repeater>
    </table>
    <asp:ObjectDataSource runat="server" ID="odsCountry" SelectMethod="GetCountrys" TypeName="amBL.Countrys">
      <SelectParameters>
        <asp:Parameter Name="flag" DefaultValue="" Type="String" />
      </SelectParameters>
    </asp:ObjectDataSource>

    • Помечено в качестве ответа YatajgaEditor 22 октября 2012 г. 19:23
    21 октября 2012 г. 20:02
    Модератор
  • спасибо, что не забыли )

    неправильно вложенных тегов не нашел, кроме что текста на линкбатоне. ну это не критично и бог с ним.

    Больше непонятно почему каждый линкбатон в репитере оборачивать в апдейтпанель надо, бред какойто, да и еще (что вобще непонятно) явно указывать этот линкбатон в триггерах, иначе не пашет... это ж уже даже не "масло масляное", это какоето "масло на масле сидит и маслом погоняет". неужто это нормальное поведение для апдейтпанели?

    зы. весьма признателен за потраченное на разбор время.


    • Изменено Acc4msdn 28 октября 2012 г. 15:25
    28 октября 2012 г. 15:21
  • К сожалению это веб-формы, которые абстрагируют нас от естественного мира разработки под HTTP. Поэтому получается "костыль". Намного эффективное и лучшее решение, можете реализовать используя jQuery Ajax и обработчик HTTP- данных, просто данную возможность уже не столь легко реализовать. В общих чертах это выглядит так: код jQuery делает запрос на сервер обработчику HTTP-данных, то отправляет список в виде данных JSON, а клиентский скрипт уже заполняет ими список. Хотя это и противоречит общей философии разработки под веб-формы.
    28 октября 2012 г. 16:16
    Модератор
  • вобщем получается: если линкбатоны прописаны "статично" в форме, то все их можно сунуть в одну апдейтпанель и все работает нормально, а если они создаются динамически в репитере или листвью, то надо оборачивать каждый линкбатон в свою апдейтпанель и еще треггер прописать, жесть.... читать читал про АП, но нигде этого не встречал и был лучшего про нее мнения.
    28 октября 2012 г. 20:34
  • Ну это только философия разработки веб-форм, а это не очень большой кусок платформы ASP.NET. Есть ещё и подход MVC. Последняя даёт полную свободу действий. Так что не стоит разочаровываться, платформа ASP.NET очень мощная "штука".
    29 октября 2012 г. 5:55
    Модератор
  • Уважаемый Yatajga, извините, не знаю Вашего имени, а подскажите пожалуйста вот такой проект http://www.zimaleto24.ru/ подскажите сколько бы времени и человеческого ресурса потребовалось для его создания профи Вашего уровня? и на чем бы Вы это создали? может более индивидуально поговорить, qip 125440694?
    30 октября 2012 г. 0:24
  • Посмотрел я на сайт: во front-end ничего сложного нет, всё обычно можно  дней за 10-15 такой собрать. Столько же примерно может занять бизнес-логика. Если будут работать параллельно верстальщик и 2 программиста, то за месяц, максимум полтора (непрерывной работы) с тестированием и прочим можно всё создать. Ну это в случае если backend не нужен.

    "и на чем бы Вы это создали?" - на ASP.NET. Но с использованием MVC.

    31 октября 2012 г. 6:00
    Модератор