この質問が頻繁に寄せられるのを見て、これを機能させるために広範な実験を行いました。ただし、他のすべての例と回答は、これまでのところ失敗しています。私は困惑しています。状況は次のとおりです。
- AsyncFileUpload は UpdatePanel にありません
- 更新するイメージとラベルは UpdatePanel にあります
- アップロードの完了後に更新が行われます
アップロードは実際に期待どおりにファイルを保存しています。私の問題は、それが起こった後にページを更新することに関するものです。アップロードされているファイルは画像であり、その画像を更新したいと考えています。ファイル名を再利用するとクライアント上で画像が更新されないという問題があることは承知していますが、念のためにラベルにも印刷しています。私が対象としている UpdatePanel が更新されていないことは確かです。
私は次のアプローチを試しました:
- サーバー側の方法を使用して条件付き UpdatePanel を手動で更新する - ファイルのアップロードがフレームで行われるため、これは失敗します。返された HTML をスニッフィングすると、投稿後に正しい HTML が実際に返されていることがわかりますが、もちろん間違ったフレームに送信されています。
- クライアント側のメソッドを使用して、UpdatePanel への JavaScript ポストバックをトリガーします。これは機能せず、その理由はわかりません。
- クライアント側のメソッドを使用して、UpdatePanel 内で JavaScript ボタンのクリックをトリガーします。繰り返しますが、何も起こりません。理由はわかりません。
- AsyncFileUpload を直接指すように UpdatePanel のトリガーを設定します。喜びはありませんが、隠しフレームを念頭に置いて、それはロングショットになることはわかっていました.
- AsyncFileUpload を UpdatePanel に移動し、上記のさまざまな方法を試します。これを行うと、サーバーに投稿されているファイルのすべてのハンドルが失われ、そもそもファイルを保存できません。
通常、この種のエラーが発生した場合、すべてのチュートリアルが間違っているように見えますが、コントロールのどこかに ID を設定しなかったためにエラーが発生し、何らかの問題が発生したことが判明しました。この場合、私はそれを見ることさえできません。ここにいくつかのコードがあります。
<fieldset class="pj_Pics">
<ul>
<li>
<label>Picture 1</label>
<asp:UpdatePanel ID="ajax_Pic1" runat="server" UpdateMode="Always">
<ContentTemplate>
<asp:Image ID="img_Pic1" runat="server" />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Button ID="Button1" runat="server" Text="Button" />
</ContentTemplate>
</asp:UpdatePanel>
<div style="position:relative;">
<div class="photoChooser">
<ajaxToolkit:AsyncFileUpload ID="fu_Pic1" runat="server" CssClass="pj_PicChoose" Width="84px" OnClientUploadComplete="picPost1" OnUploadedComplete="fu_PictureFile_UploadedComplete" ThrobberID="throb1" />
<span><asp:Literal runat="server" Text="click to change"></asp:Literal></span>
<asp:Image ID="throb1" runat="server" ImageUrl="~/images/throbber.gif" AlternateText="uploading image" />
</div>
</div>
</li>
</ul>
</fieldset>
protected void fu_PictureFile_UploadedComplete(object sender, AjaxControlToolkit.AsyncFileUploadEventArgs e)
{
bla bla bla;
// and update the image
img.ImageUrl = "~/" + webfolder + imageFileName;
thing.Text = img.ImageUrl;
}
function picPost1(sender, args) {
document.getElementById('<%# Button1.ClientID %>').click();
}
どんな助けでも大歓迎です。ページには明らかに ScriptManager があり、私が示したコードは私が最後に試みたものです。他に何か見る必要がある場合はお知らせください。
ありがとうございました!