Дублирующее содержимое панели обновления ASP.NET Webforms - PullRequest
1 голос
/ 27 февраля 2010

Мне передан огромный проект Webforms, который я пытаюсь понять, и у меня возникла проблема, когда панель обновлений дублирует большую часть своего содержимого. Код aspx для панели огромен, длиной в сотни строк, но в основном он выглядит как этот простой пример, только с большим количеством asp:TextBox и asp:ListBox.

<asp:UpdatePanel runat="server" ChildrenAsTriggers="true" RenderMode="Block" UpdateMode="Conditional">
            <ContentTemplate>
                <div><table><tbody><tr><td>
                <label>Search</label><asp:TextBox ID="Search" runat="server"  />
                <asp:LinkButton runat="server" OnClick="find_Click" >Find</asp:LinkButton>
                </td></tr></tbody></table></div>
                <div id="a"><table><tbody><tr><td>
                <label>Result</label><asp:TextBox ID="Result" runat="server" />
                </td></tr></tbody></table></div>       
            </ContentTemplate>
        </asp:UpdatePanel>

и код, подобный этому.

public void find_Click(Object sender, EventArgs e)
{
    Result.Text = "oranges";
}

Когда вы нажмете кнопку LinkButton, я ожидаю увидеть в результате раздел <div id="a">, но с текстом «апельсины» в TextBox. На самом деле вы получаете <div id="a"> с 'апельсинами', за которым следует оригинальное <div id="a"> с пустым TextBox. Хуже всего то, что он не делает этого в этом простом примере, даже на странице, которую я создал, у которой были все оригинальные asp:TextBox и asp:ListBox, но заполненные фиктивными данными. Может кто-нибудь указать мне какие-либо хорошие способы решения этой проблемы?

Ответы [ 3 ]

3 голосов
/ 13 января 2015

Другим решением было бы убедиться, что все теги HTML закрыты внутри asp:UpdatePanel. В моем случае у меня есть открытый тег header, помещенный в файл Site.Master (вне элемента управления UpdatePanel) и закрывающий тег заголовка внутри элемента управления UpdatePanel (на странице aspx). Из-за этого каждый раз, когда UpdatePanel выполняет постбэк, он снова создает закрывающий тег заголовка, вызывая дублирование контента. После того, как я поместил закрывающий тег в файл Site.Master, все заработало прекрасно.

3 голосов
/ 27 февраля 2010

Возможно, вы уже пробовали это, но возможно ли на странице проблемы решить удалить как можно больше серверных элементов управления из панели обновления и просто оставить их в текстовом поле, а затем посмотреть, что происходит? Я предполагаю, что вам, вероятно, придется закомментировать много кода .cs / .vb, что может быть неприятно.

Также попробуйте удалить панель обновления и посмотреть, что произойдет.

0 голосов
/ 28 февраля 2010

Некоторый серьезный рефакторинг позже, теперь это выглядит (очень раздутая версия) следующим образом.

<div><table><tbody><tr><td>
<label>Search</label><asp:TextBox ID="Search" runat="server"  />
<asp:LinkButton runat="server" OnClick="find_Click" >Find</asp:LinkButton>
</td></tr></tbody></table></div>
<asp:UpdatePanel runat="server" ChildrenAsTriggers="true" RenderMode="Block" UpdateMode="Conditional">
            <ContentTemplate>
                <div id="a"><table><tbody><tr><td>
                <label>Result</label><asp:TextBox ID="Result" runat="server" />
                </td></tr></tbody></table></div>       
            </ContentTemplate>
        </asp:UpdatePanel>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...