Элемент управления изображением Formview очищает ImageUrl, установленный кодом при переключении режима

#c# #asp.net

#c# #asp.net

Вопрос:

У меня есть asp:Formview asp:Image элемент, который содержит ImageURL DataBound элемент, для которого при загрузке страницы с использованием некоторого кода C # установлено отдельное значение, но когда режим Formview переключается на редактирование — значение ImageUrl теряется, хотя я снова установил его в методе OnModeChanged. Код выглядит следующим образом:
aspx

 <asp:FormView ID="accountFormview" runat="server" DefaultMode="ReadOnly" OnModeChanged="accountFormview_ModeChanged" DataSourceID="UserDataSource" DataKeyNames="User_Id" style="margin-right: 1px; float:left;" Width="512px">
    <EditItemTemplate>
        <asp:Image ID="imgAvatar" runat="server" ImageUrl="~/Images/defaultAccountImage.png" Height="100px" BorderColor="#003399" BorderWidth="1px" />
        <asp:TextBox ID="txtAvatarFilePath" runat="server" Text='<%# Bind("Avatar_Img_Path") %>'> 
    </asp:TextBox>
    </EditItemTemplate>
  
    <ItemTemplate>
        <asp:Image ID="imgAvatar" runat="server" Height="100px" BorderColor="#003399" BorderWidth="1px"/>
        <asp:TextBox ID="txtAvatarFilePath" runat="server" Text='<%# Bind("Avatar_Img_Path") %>'> 
    </asp:TextBox>>
    </ItemTemplate>
</asp:FormView>
 

C#

 string avatarFileName = ((TextBox)accountFormview.FindControl("txtAvatarFilePath")).Text;
Image avatarImage = avatarImage = (Image)accountFormview.FindControl("imgAvatar");
string saveFilePath = @"\"   ConfigurationManager.AppSettings["FileServer"].ToString()   @"Images"
if( File.Exists(saveFilePath   "\"   avatarFileName))
{
    avatarImage.ImageUrl = saveFilePath   "\"   avatarFileName;
}
else
{
    avatarImage.ImageUrl = @"~ImagesdefaultAccountImage.png";
}
 

Пример:
Страница загружена — появляются изображения собак
Выберите редактировать — пропал
Отменить возврат только для чтения — снова исчез
пример ошибки

Я не могу привязать ImageUrl к данным по умолчанию, поскольку для этого необходимо использовать ConfigurationManager. Код C # вызывается при загрузке страницы и отлично настраивает изображения, но как только режим Formview изменяется — они устанавливаются по умолчанию, даже если у меня есть метод OnModeChanged, который также вызывает код C #.

Ответ №1:

Найдено исправление для этого, добавив изменение asp:FormView для использования OnPreRender вместо OnModeChanged вызова отображения изображений. Итак, исправленный код выглядит так:

 <asp:FormView ID="accountFormview" runat="server" DefaultMode="ReadOnly"  
 OnPreRender="accountFormview_ModeChanged" 
 DataSourceID="UserDataSource" DataKeyNames="User_Id" style="margin-right: 1px; float:left;" Width="512px">