あなたはこれを試すことができます
この JavaScript を追加して、非表示フィールドhdntestに URL を設定します
<script type="text/javascript">
function onClientUploadComplete(sender, e) {
document.getElementById('<%=hdntest.ClientID %>').value = e.get_postedUrl();
}
</script>
これがAjaxFileUploadのあり方です
<asp:UpdatePanel ID="up" runat="server">
<ContentTemplate>
<ajaxToolkit:AjaxFileUpload ID="AjaxFileUpload1" runat="server" OnUploadComplete="AjaxFileUpload1_UploadComplete" ViewStateMode="Inherit"
OnClientUploadComplete="onClientUploadComplete"/>
<asp:Button ID="btnUpload" runat="server" Text="Upload" OnClick="btnUpload_Click" />
<asp:HiddenField ID="hdntest" runat="server" />
<br /><asp:Image ID="Image1" runat="server" Width="200px" Height="200px"/>
</ContentTemplate>
<Triggers> <asp:PostBackTrigger ControlID="btnUpload" /> </Triggers>
</asp:UpdatePanel>
すべてのコントロールを同じ UpdatePanel に配置し、次のプロパティを AjaxFileUpload コントロールに追加する必要があります: OnClientUploadComplete="onClientUploadComplete"
あなたのコードでは非表示にする必要があります
protected void btnUpload_Click(object sender, EventArgs e)
{
string c = hdntest.Value;
Image1.ImageUrl = c;
}
protected void AjaxFileUpload1_UploadComplete(object sender, AjaxControlToolkit.AjaxFileUploadEventArgs e)
{
if (e.ContentType.Contains("jpg") || e.ContentType.Contains("gif")
|| e.ContentType.Contains("png") || e.ContentType.Contains("jpeg"))
{
Session["fileContentType_" + e.FileId] = e.ContentType;
Session["fileContents_" + e.FileId] = e.GetContents();
}
// Set PostedUrl to preview the uploaded file.
e.PostedUrl = string.Format("?preview=1&fileId={0}", e.FileId);
}
最後に、page_load イベント ハンドラーで psted url を処理する必要があります。
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["preview"] == "1" && !string.IsNullOrEmpty(Request.QueryString["fileId"]))
{
var fileId = Request.QueryString["fileId"];
var fileContents = (byte[])Session["fileContents_" + fileId];
var fileContentType = (string)Session["fileContentType_" + fileId];
// To clear the current uploaded file, prepare to upload other files
if (fileContents != null)
{
Response.Clear();
Response.ContentType = fileContentType;
Response.BinaryWrite(fileContents);
Response.End();
}
}
}