Дублирующее содержимое панели обновления ASP.NET Webforms
Мне передали огромный проект 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 ответа
Возможно, вы уже пробовали это, но возможно ли на странице проблемы удалить как можно больше серверных элементов управления из панели обновления и просто оставить их в текстовом поле, а затем посмотреть, что произойдет? Я предполагаю, что вам, вероятно, придется закомментировать много кода.cs /.vb, что может быть проблемой.
Также попробуйте удалить панель обновления и посмотреть, что произойдет.
Другим решением было бы убедиться, что все теги HTML закрыты внутри asp:UpdatePanel
, В моем случае у меня есть открытый header
тег размещен в Site.Master
файл (вне элемента управления UpdatePanel) и закрывающий тег заголовка внутри элемента управления UpdatePanel (включен aspx
страница). По этой причине каждый раз, когда UpdatePanel выполняет обратную передачу, он снова создает закрывающий тег заголовка, вызывая дублирование содержимого. После того, как я поместил закрывающий тег в файл Site.Master, все работало прекрасно.
Некоторый серьезный рефакторинг позже, теперь это выглядит (очень раздутая версия) этим.
<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>