저는 수 시간 동안이 문제에 봉착했습니다. 검색된 포럼은 사람들이 제안한 모든 것을 시도했지만 효과가 없습니다.ASP.Net UpdatePanel 업데이트되지 않음, 부분 포스트 백 발생 횟수
나는 (다소 큰) 웹 양식을 가지고 있습니다. 폼의 어딘가에는 CuteSoft Ajax Uploader 컨트롤이 포함 된 updatePanel이 있습니다. 이 컨트롤은 파일이 업로드 될 때 내 코드에서 함수를 호출합니다. 제대로 작동합니다. 이 함수에서는 updatePanel (축소판 등 추가)의 내용을 약간 변경했지만 변경 사항은 프런트 엔드에 반영되지 않습니다. (관련이없는 비트가 밖으로 다진와) 여기
폼의 : 코드 숨김은 다음과 같습니다<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="VehicleSubmissionWizard.ascx.cs"
Inherits="MaxAdmin.UserControls.VehicleSubmissionWizard" %>
...
<div id="template3" style="display: none;">
<div class="top-section">
<div id="column-left">
...
<div id="column-right">
...
<form runat="server" id="form1" action="">
<%--Panel 1--%>
<asp:Panel runat="server" ID="pnlSubmissionWizard1">
...
</asp:Panel>
<%--/Panel 1--%>
<%--Panel 2--%>
<asp:Panel runat="server" ID="pnlSubmissionWizard2">
...
<h2>
Vehicle images</h2>
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true"
AjaxFrameworkMode="Enabled" ClientIDMode="Static" EnableViewState="true" LoadScriptsBeforeUI="true"
ScriptMode="Auto" ViewStateMode="Enabled">
</asp:ScriptManager>
<asp:UpdatePanel runat="server" EnableViewState="false" ID="upImageUpload" UpdateMode="Conditional">
<Triggers>
<%-- <asp:AsyncPostBackTrigger ControlID="Uploader"
EventName="FileUploaded" />
--%>
</Triggers>
<ContentTemplate>
<input id="hdnImages" class="imagesUpload" type="hidden" />
<asp:HiddenField ID="hdn" runat="server" />
<CuteWebUI:Uploader ID="Uploader" runat="server" EnableViewState="false" MaxFilesLimit="3"
MaxFilesLimitMsg="Please upload a maximum of 3 photos" InsertButtonStyle-Width="280px"
MultipleFilesUpload="true" InsertText="Upload Photos [Max 3 Photos at up to 4mb each]"
OnFileUploaded="Uploader_FileUploaded" OnUploadCompleted="Uploader_Complete">
<ValidateOption MaxSizeKB="4096" AllowedFileExtensions="jpg,gif,png" />
</CuteWebUI:Uploader>
<div id="attachmentsDiv">
<CuteWebUI:UploadAttachments EnableViewState="false" runat="server" ID="Attachments"
MaxFilesLimit="3" Visible="false">
<ValidateOption MaxSizeKB="4096" AllowedFileExtensions="jpg,gif,png" />
</CuteWebUI:UploadAttachments>
</div>
<br />
<asp:Panel ID="pnlImageDetails_1" runat="server" CssClass="display_none" Style="float: left;
margin-bottom: 0">
<div class="uploadedImage" style="clear: both; float: left; margin: 5px 20px 5px 75px;">
<div style="text-align: center">
<asp:Image ID="imgUploadedImage1" runat="server" />
</div>
<div style="text-align: center">
<asp:LinkButton ID="btnRemoveImage_1" runat="server" OnCommand="RemoveImage_Click"
CommandName="1" Text="Remove Image" CssClass="RemoveLinkButton" Style="margin-left: 15px;" />
</div>
</div>
</asp:Panel>
<asp:Panel ID="pnlImageDetails_2" runat="server" CssClass="display_none" Style="float: left;">
<div class="uploadedImage" style="clear: both; float: left; margin: 5px 20px 5px 20px;">
<div style="text-align: center">
<asp:Image ID="imgUploadedImage2" runat="server" />
</div>
<div style="text-align: center">
<asp:LinkButton ID="btnRemoveImage_2" runat="server" OnCommand="RemoveImage_Click"
CommandName="2" Text="Remove Image" CssClass="RemoveLinkButton" Style="margin-left: 15px;" />
</div>
</div>
</asp:Panel>
<asp:Panel ID="pnlImageDetails_3" runat="server" CssClass="display_none" Style="float: left;">
<div class="uploadedImage" style="clear: both; float: left; margin: 5px 20px 5px 20px;">
<div style="text-align: center">
<asp:Image ID="imgUploadedImage3" runat="server" />
</div>
<div style="text-align: center">
<asp:LinkButton ID="btnRemoveImage_3" runat="server" OnCommand="RemoveImage_Click"
CommandName="3" Text="Remove Image" CssClass="RemoveLinkButton" Style="margin-left: 15px;" />
</div>
</div>
</asp:Panel>
<script language="javascript" type="text/javascript">
var Image_Count = $('#<%= hdn.ClientID %>').val();
</script>
</ContentTemplate>
</asp:UpdatePanel>
...
</asp:Panel>
<%--/Panel 2--%>
<%--Panel 3--%>
<asp:Panel runat="server" ID="pnlSubmissionWizard3">
...
</asp:Panel>
<%--/Panel 3--%>
<%-- Panel 4--%>
<asp:Panel Visible="false" runat="server" ID="pnlSubmissionWizard4">
...
</asp:Panel>
<%--/Panel 4--%>
</form>
...
</div>
:
...
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
//Uploader.FileUploaded += new CuteWebUI.UploaderEventHandler(Uploader_FileUploaded);
Uploader.FileUploaded += Uploader_FileUploaded;
Uploader.UploadCompleted += Uploader_Complete;
Attachments.AttachmentRemoveClicked += Attachments_AttachmentRemoveClicked;
Attachments.InsertButton.Style["display"] = "none";
((HiddenField)FindControl("hdn")).Value = "0";
}
...
protected void Uploader_FileUploaded(object sender, CuteWebUI.UploaderEventArgs args)
{
...
using (System.IO.Stream stream = args.OpenStream())
{
// Check if file already exists - seems to do each image twice for some reason...
foreach (var ph in Photos)
if (String.Equals(ph.FileName, args.FileName))
return;
...
// Show image thumbnail
ShowUploadedPhotoDetails(p, ImageCount);
}
}
catch (Exception ex)
{
...
}
}
private void ShowUploadedPhotoDetails(Photo photo, int imageNo)
{
if (imageNo <= 3)
{
var imagePanel = (Panel)FindControl(String.Concat("pnlImageDetails_", imageNo));
imagePanel.CssClass = "display_block";
imagePanel.Visible = true;
var uploadedImage = (System.Web.UI.WebControls.Image)FindControl(String.Concat("imgUploadedImage", imageNo));
uploadedImage.ImageUrl = photo.ImageUrlThumb;
uploadedImage.Visible = true;
uploadedImage.CssClass = "CSS_CLASS";
}
}
protected void Uploader_Complete(object sender, CuteWebUI.UploaderEventArgs[] args)
{
Uploader uploader = (Uploader)sender;
uploader.InsertButton.Enabled = (Photos.Count < 3);
// Force updatePanel to update
upImageUpload.Update();
}
을 그래서 모두 위의 기능 불 때를 이미지가 업로드됩니다. 이미지 데이터가 제대로 전달됩니다. 컨트롤 (예 : ImageUrl, CssClass 등)에 할당 된 값을 디버깅하면 컨트롤에 올바르게 할당되고 있음을 알 수 있습니다. 그러나 값은 프런트 엔드에서 결코 새로 고쳐지지 않습니다.
내가 놓친 아이디어가 있습니까?
감사 힙 그렉
아마 Uploader_Complete 이벤트가 마지막 페이지 이벤트 이후에 발생하여 화면에서 출력을 업데이트 할 수 있습니다. – TheGeekYouNeed