我有一个应用程序,我想强制下载图像,而不是在浏览器中显示。 response.writefile似乎完成了这个。
但是,如果我从我的ICallBackEvent Handler中以编程方式调用我的方法,则没有任何反应。没有错误,它只是挂起。
通过代码显示该方法运行,但文件没有下载,并且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;
......
答案 0 :(得分:1)
我明白了。我无法通过回调启动Response.xx。我设置了一个隐藏的asp按钮来执行我想要的功能,然后通过回传来从JavaScript中调用它。