response.writefile ("filename.png") работает при срабатывании через кнопку, но не при срабатывании через обратный вызов - PullRequest
0 голосов
/ 06 марта 2012

У меня есть приложение, в котором я хочу, чтобы изображение загружалось, а не отображалось в браузере. response.writefile, кажется, выполняет это.

Однако, если я вызываю свой метод программно из моего обработчика 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;


......

1 Ответ

1 голос
/ 14 марта 2012

Я понял это. Я не могу инициировать Response.xx от обратного звонка. Я установил скрытую кнопку asp, которая выполняет желаемую функцию, и затем вызываю ее из JavaScript с обратной записью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...