0
我有一個應用程序,我想強制下載圖像,而不是在瀏覽器中顯示。 response.writefile似乎完成了這一點。response.writefile(「filename.png」)在通過按鈕觸發時有效,但不是在通過回調觸發時觸發
但是,如果我從我的ICallBackEvent處理程序中編程調用我的方法,則不會發生任何事情。沒有錯誤拋出,它只是掛起。
通過代碼的變通顯示該方法運行,但該文件不下載,並且CallBack永遠不會結束。我不知道發生了什麼事。
protected void Button1_Click(object sender, EventArgs e)
{
downloadtest();
}
public string downloadtest()
{
string fileName = "";
string outPath = HttpContext.Current.Server.MapPath("~/images/") + @"logo.png";
fileName = "logo.png";
Response.Clear();
Response.AddHeader("content-disposition", "attachment;filename=" + fileName);
Response.WriteFile("logo.png");
Response.End();
return fileName;
}
所以,如果我點擊按鈕,它會很好用。
但是如果我從我的回調代碼中調用downloadtest(),則什麼都不會發生。
謝謝你的任何想法。
這是我的回調代碼。
這很長,但這裏有很大的一塊。
服務器端首先...
String cbReference = Page.ClientScript.GetCallbackEventReference(this, "arg", "ReceiveServerData", "context");
String callbackScript = "function CallServer(arg, context)" + "{ " + cbReference + ";}";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "CallServer", callbackScript, true);
.......
#region ICallbackEventHandler Members
string CBResult = string.Empty;
public string GetCallbackResult()
{
return CBResult;
}
public void RaiseCallbackEvent(string eventArgument)
{
string[] args = eventArgument.Split(',');
string sessionidvar = args[0];
string Argument = args[1];
GeoCollection<Overlay> MapOverlays;
string statepath = OverlayClass.SetStatePath(sessionidvar);
CBResult = string.Empty;
switch (Argument)
.......
case "contribution":
downloadtest();
CBResult = "contribution";
break;
客戶端....
function mapHeatLayerLoad(HEATLAYER) {
var sessionid = $('.logo').attr('data-SessionId');
var offset = $('#divMap').offset();
var HTML = "<div id='mapupdatingdiv'><H1>Map Updating...</H1>";
HTML += "<img id='mapLoaderGif' src='/images/ajax-loader.gif' alt='Image'/>";
HTML += "</div>";
$('#divMap').append(HTML);
CallServer(sessionid + "," + HEATLAYER, "");
}
..........
function ReceiveServerData(rValue) {
var argArray = rValue.split(',');
var map = Map1.GetOpenLayersMap();
var sessionid = $('.logo').attr('data-SessionId');
var PenetrationLayer = map.getLayer("PenetrationOverlay");
var ContributionLayer = map.getLayer("ContributionOverlay");
var PenChangeLayer = map.getLayer("PenChangeOverlay");
var ConChangeLayer = map.getLayer("ConChangeOverlay");
var CompetitorLayer = map.getLayer("CompetitorOverlay");
var HighLightLayer = map.getLayer("HighLightDynamicOverlay");
var ZipBordersLayer = map.getLayer("ZipBordersOverlay");
var PSALayer = map.getLayer("PSAOverlay");
var SSALayer = map.getLayer("SSAOverlay");
var WaterLayer = map.getLayer("WaterOverlay");
var HighwaysLayer = map.getLayer("HighwaysOverlay");
var ASCIconLayer = map.getLayer("ASCIconOverlay");
var HospitalIconLayer = map.getLayer("HospitalIconOverlay");
var ASCLayer = map.getLayer("ASCOverlay");
var HospitalsLayer = map.getLayer("HospitalsOverlay");
var ClientLayer = map.getLayer("ClientOverlay");
$('#mapupdatingdiv').fadeOut('slow', function() { $('#mapupdatingdiv').remove(); });
switch (argArray[0]) {
........
case "contribution":
map.getLayer("ContributionOverlay").redraw(true);
BuildLegend(2);
break;
......
向我們顯示您的回撥代碼? – egrunin 2012-03-05 21:57:45
當你通過回調調用你的方法時,它是否真的進入downloadtest()? – 2012-03-06 14:47:08
回調到服務器上的一段代碼,從這裏執行downloadtest()。 – eshepard 2012-03-06 21:19:16