Сучасна диджитал-освіта для дітей — безоплатне заняття в GoITeens ×
Mazda CX 5
×

ASP Label-ы на диалоге не обновляются после присвоения значения в C#

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

Помогите, люди добрые, кто чем может ^__^
Я уже несколько дней борюсь с этой мистикой...

У меня в .aspx есть GridView со списком клиентов.
В одной из колонок есть LinkButton, по клику на который я показываю информацию о последнем контакте этого клиента.
Так вот, почему-то, когда я открываю формочку ViewContact, она первый раз показывает правильно все данные о человеке, на которого я кликнула в гриде, а следующие разы показывает опять его, хотя я кликаю на других строках грида.
Т.е. asp:Label не перерисовывается.
Хотя если поставить брейкпойнт в обработчике события OnClick в c# и отлаживать код, то видно, что присвоение lblContactClientName.Text происходит успешно, и что в lblContactClientName, как и в остальных лейблах, хранится инфа о том человеке, на которого я только что кликнула.
Но отображается «старый» человек((((

P.S. Я пробовала дописать AutoPostBack="True" моему LinkButton-у, но это не помогло.
P.P.S. И GridView с LinkButton-ом, и диалог — лежат на одной UpdatePanel.
P.P.P.S. Я поменяла присвоение на случайное число:
Random random = new Random();
int randomNumber = random.Next(0, 100000);
lblContactClientName.Text = randomNumber.ToString();
и всё время показывает 67432 !!!!!!!!!
(при кликаньи на разных клиентов)
Т.е. лэйблы просто не перерисовываются...

А вот и код:

<asp:Content ID="cntPageContent" ContentPlaceHolderID="cphPageContent" Runat="Server">
    <asp:UpdatePanel ID="upHome"  runat="server" UpdateMode="Conditional">
        <ContentTemplate>
        <table>
            <tr>
             <td colspan="2">
            <asp:GridView ID="gvClients" runat="server" CssClass="grid" CellSpacing="-1" AutoGenerateColumns="False" 
                OnRowDataBound="GridView_OnRowDataBound" 
                HeaderStyle-HorizontalAlign="Left" HeaderStyle-Font-Underline="true">
                <Columns>
                                    <asp:TemplateField HeaderText="Last Contact">
                        <ItemTemplate>
                            <asp:LinkButton runat="server" ID="lbLastContact" Text='<%#Eval("ContactDateStartTimeStr") %>' OnClick="LbLastContact_Click" CommandArgument='<%# Eval("ClientID") %>'></asp:LinkButton>
                        </ItemTemplate>
                    </asp:TemplateField>
<div id="ViewContactDialog" style="display: none;" >
                 <asp:Panel runat="server" ID="plnViewContact">
                     <table width="100%">
                        <tr>
                            <td><h1><asp:Label ID="lblContactClientName" runat="server">Client Name</asp:Label></h1></td>                        
                        </tr>
                         <tr>
                            <td><span style="font-weight: bold;">Date of Contact:</span></td>
                            <td><asp:Label ID="lblContactDate" runat="server"></asp:Label></td>
                        </tr>
                      </table>
                </asp:Panel>
                <div style="position: relative; height: 25px;padding-top: 15px; width: 430px;">
                    <div style="position: absolute; right: 0px;">
                        <asp:Button ID="btnEditContact" runat="server" Text="Edit Contact" UseSubmitBehavior="false" OnClick="btnEditContact_Click"  CommandArgument='<%# Eval("ContactID")%>'/>
                    </div>
                </div>
            </div>
 protected void LbLastContact_Click(object sender, EventArgs e)
        {
            int ClientID = Convert.ToInt32((sender as LinkButton).CommandArgument);

            var сontact = new Contact()
            {
                ClientId = ClientID
            };

            Contact lastcontact = (Contact)сontact.ExecuteCommand(CommandName.getLastContact);

            lblContactClientName.Text = lastcontact.ClientName;
            lblContactDate.Text = lastcontact.ContactDateStr;

            string script = "$('#ViewContactDialog').dialog({title: 'View Contact', bgiframe: true,autoOpen: false,width: 460, height:510, modal: true});" +
                            "$('#ViewContactDialog').dialog('open');" +
                            "ApplyJQueryControls(); ";
            ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "View Contact", script, true);

        }
👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Дозволені теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

Попробуйте добавит скрипт после dialog.open, который проапдейтит innerText для HTML input с id = lblConctactClientName.ClientID

Ребята, я уже отмучалась! Может, кому-то пригодится. После всех перепробованных идей сработало добавить

$(this).dialog(’destroy’);

Попробуйте удалять диалог при его закрытии:
.dialog({title: 'View Contact', bgiframe: true, autoOpen: false, width: 460, height:510, modal: true, close: function() { $(this).dialog('destroy'); } })

Дело в том, что jQuery создает свой диалог вне UpdatePanel. Если посмотреть, например, в DOM Explorer (IE) при открытом диалоге (Inspect Element на каком-нибудь элементе диалогового окна), можно будет увидеть, что div id="MainContent_plnViewContact" находится не в div id="MainContent_upHome". Из-за этого при каждом postback создается новый экземпляр диалог бокса — с теми же самыми id и т.д., что приводит к неожиданным эффектам.

я пришла к тому же решению, что и Вы! ^__^ но фразы «создается новый экземпляр диалог бокса» и «попробуйте удалять диалог при его закрытии» в одном месседже — это когнитивный диссонанс какой-то)) наоборот же, не создается новый экземпляр, а юзается та же форма, потому и значения остаются старые, как я понимаю. потому мне и пришло в голову его как-то уничтожить. (пробовала ещё remove и empty, но к желаемому результату привёл именно destroy).
в любом случае, спасибо огромное за помощь! если бы я сама уже к этому днём не пришла, то Ваш комент был бы просто моим спасением!!!!!

немного не по теме:
Но в фронтенде так часто бывает, если забыл склонировать значение в рендер, а просто передал ссылку — всплывают странные баги типа вашего

Коментар порушує правила спільноти і видалений модераторами.

Підписатись на коментарі