Ответ 1
Я нашел решение:
Мне пришлось добавить runat="server"
в тег <img>
внутри <asp:LinkButton>
:
<img src="img/print-icon.png" alt="" runat="server" />
У меня есть кнопка ссылки:
<asp:LinkButton ID="LinkButtonPrint" runat="server" OnClick="OnPrint_Click">
<img src="img/print-icon.png" alt="" />
<asp:Literal runat="server" Text="<%$ Resources:PrintPage %>" />
</asp:LinkButton>
В коде позади я добавляю обработчик onclick
в Page_Load
следующим образом:
LinkButtonPrint.Attributes["onclick"] = "StartLoadTracking(this, '" + GetLocalResourceObject("Loading") + "')";
Представленный HTML выглядит следующим образом:
<a href="javascript:__doPostBack('ctl00$LinkButtonPrint','')"
id="ctl00_LinkButtonPrint" onclick="StartLoadTracking(this, 'Loading...');">
<img alt="" src="img/print-icon.png">Print page
</a>
Если я нажму на эту кнопку, он будет работать нормально (он ответит файлом PFD, поэтому HTML-код не будет отправлен обратно в браузер), но если я нажму кнопку другой на странице (что делает полный postback) LinkButtonPrint
не будет иметь внутренний контент, он будет отображаться следующим образом:
<a href="javascript:__doPostBack('ctl00$LinkButtonPrint','')"
id="ctl00_LinkButtonPrint" onclick="StartLoadTracking(this, 'Loading...');"></a>
Если я удаляю строку LinkButtonPrint.Attributes["onclick"] = ...
из Page_Load
, все работает нормально (за исключением того, что моя js-функция не вызывается, но это нормально).
Что мне здесь не хватает?
ИЗМЕНИТЬ
Это дубликат
Изображение кнопки asp.net Link не видно после обратной передачи
но этот не решается также: (
Я нашел решение:
Мне пришлось добавить runat="server"
в тег <img>
внутри <asp:LinkButton>
:
<img src="img/print-icon.png" alt="" runat="server" />
Эта проблема теперь известна Microsoft, и они опубликовали официальное выражение и обходное решение проблемы Microsoft Connect 718810: LinkButton контролирует сбор данных, потерянный при обратной передаче.
Оператор Microsoft:
Благодарим вас за отзыв. Это похоже на странность с тем фактом, что элемент управления LinkButton позволяет прямое текстовое содержимое через свойство Text или в разметке или субконтроллеры через коллекцию Control или разметку. Обходной путь заключается в использовании заполнителя в качестве корневого содержимого для управления и размещения там желаемого смешанного содержимого, например.
<asp:LinkButton runat="server">
<asp:PlaceHolder runat="server">
This is some text.</br>
<asp:Label runat="server">This is a control</asp:Label>
</asp:PlaceHolder>
</asp:LinkButton>
проблема заключается в том, что Атрибуты [ "onclick" ] = переопределяют обработчик операции onclick.
2 вещь, которую вы могли бы попробовать:
LinkButtonPrint.Attributes.Add("onclick", "StartLoadTracking(this, '" + GetLocalResourceObject("Loading") + "');");
или
LinkButtonPrint.Attributes["onclick"] = "StartLoadTracking(this, '" + GetLocalResourceObject("Loading") + "');" + LinkButtonPrint.Attributes["onclick"];
Просто заметьте, чтобы добавить к решению выше.
Я обнаружил, что это происходит конкретно, когда у меня был enabled = false (чтобы показать отключенный стиль) мою ссылку, а затем вызвал обратную передачу с страницы с помощью другого элемента управления.
Компонент .Text элемента linkbutton был уничтожен после обратной передачи.
НО, поставив runat = "server" на теги .Text/html (em, span), они теперь сохраняются после обратной передачи.