ASP Label-ы на диалоге не обновляются после присвоения значения в C#
Помогите, люди добрые, кто чем может ^__^
Я уже несколько дней борюсь с этой мистикой...
У меня в .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);
}
5 коментарів
Додати коментар Підписатись на коментаріВідписатись від коментарівПопробуйте добавит скрипт после dialog.open, который проапдейтит innerText для HTML input с id = lblConctactClientName.ClientID
Ребята, я уже отмучалась! Может, кому-то пригодится. После всех перепробованных идей сработало добавить
Попробуйте удалять диалог при его закрытии:
.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).
в любом случае, спасибо огромное за помощь! если бы я сама уже к этому днём не пришла, то Ваш комент был бы просто моим спасением!!!!!
немного не по теме:
Но в фронтенде так часто бывает, если забыл склонировать значение в рендер, а просто передал ссылку — всплывают странные баги типа вашего
Коментар порушує правила спільноти і видалений модераторами.