-1

I want to show a modal pop up after my pdf gets downloaded successfully,everything is working but after response.end as you know no code gets executed I have tried with scriptmanager to open the modal but there was no success .Please help any help would be beneficial.

I think no code gets executed after response.end()

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using HotelBAL;
using System.Data;
using iTextSharp.text;
using iTextSharp.text.pdf;
using iTextSharp.text.html.simpleparser;
using System.Web.Services;
using System.Web.Script.Services;

namespace HotelReservation.UserView
        {
            public partial class CancelBooking : System.Web.UI.Page
            {
                static int uid = 0;

                protected void Page_Load(object sender, EventArgs e)
                {
                    if (Session["UName"] == null)
                    {
                        Response.Redirect("../Views/Login.aspx");
                    }
                    else
                    {
                        ScriptManager.RegisterStartupScript(Page, Page.GetType(), "stepconfirm3", "$('#loginbtn').hide();", true);
                        uid = Convert.ToInt32(Session["UId"]);  
                    }
                }

                public  void BillDownloader(int uid, int bookingId, int totalPrice)
                {
                    try
                    {
                        //PdfPTable pdfTable = 
                        DataTable dt = FileUtilityBal.CancelgeneratePDF(uid, bookingId);
                        GridView objGV = new GridView();
                        objGV.AutoGenerateColumns = false;
                        for (int i = 0; i < dt.Columns.Count; i++)
                        {
                            BoundField boundField = new BoundField();
                            boundField.DataField = dt.Columns[i].ColumnName.ToString();
                            boundField.HeaderText = dt.Columns[i].ColumnName.ToString();
                            objGV.Columns.Add(boundField);

                        }
                        objGV.DataSource = dt;
                        objGV.DataBind();
                        int columnsCount = objGV.Columns.Count;
                        PdfPTable pdfTable = new PdfPTable(columnsCount);

                        //Header
                        BaseFont btnColumnHeader = BaseFont.CreateFont(BaseFont.TIMES_ROMAN, BaseFont.CP1252, BaseFont.NOT_EMBEDDED);
                        Font fntColumnHeader = new Font(btnColumnHeader, 10, 1);
                        for (int i = 0; i < dt.Columns.Count; i++)
                        {
                            PdfPCell cell = new PdfPCell();
                            cell.AddElement(new Chunk(dt.Columns[i].ColumnName.ToUpper(), fntColumnHeader));
                            pdfTable.AddCell(cell);
                        }

                        //DataTable
                        for (int i = 0; i < dt.Rows.Count; i++)
                        {
                            for (int j = 0; j < dt.Columns.Count; j++)
                            {
                                pdfTable.AddCell(dt.Rows[i][j].ToString());
                            }
                        }

                        Document pdfDocument = new Document(PageSize.A4, 10f, 10f, 10f, 10f);
                        PdfWriter.GetInstance(pdfDocument, HttpContext.Current.ApplicationInstance.Response.OutputStream);
                        pdfDocument.Open();

                        var FontColour = new BaseColor(192, 192, 192);
                        var Calibri8 = FontFactory.GetFont("CALIBRI_BOLD", 35, FontColour);
                        Paragraph paragraph = new Paragraph("Cancellation Details", Calibri8);
                        paragraph.Alignment = Element.ALIGN_CENTER;
                    paragraph.SpacingAfter = 10f;
                    iTextSharp.text.Image jpg = iTextSharp.text.Image.GetInstance(HttpContext.Current.ApplicationInstance.Server.MapPath("../") + "/images/h-logo.jpg");
                    jpg.ScaleToFit(150, 150);
                    jpg.Alignment = Element.ALIGN_CENTER;
                    pdfDocument.Add(jpg);
                    pdfDocument.Add(paragraph);

                    pdfDocument.Add(pdfTable);
                    var FontColour1 = new BaseColor(192, 192, 192);
                    var Calibri9 = FontFactory.GetFont("CALIBRI_BOLD", 35, FontColour1);
                    Paragraph p7 = new Paragraph("Invoice", Calibri9);
                    p7.Alignment = Element.ALIGN_CENTER;
                    p7.SpacingAfter = 30f;
                    pdfDocument.Add(p7);
                    var FontColour2 = new BaseColor(255, 87, 51);
                    var Calibri10 = FontFactory.GetFont("CALIBRI_BOLD", 15);
                    var Calibri11 = FontFactory.GetFont("CALIBRI_BOLD", 15, FontColour2);
                    Paragraph p2 = new Paragraph("       Refund Price (50% of Total)     Rs." + (totalPrice * 0.50) + "                     ", Calibri10);
                    Paragraph p5 = new Paragraph("------------------------------------------------------------------------------------------------", Calibri10);
                    Paragraph p6 = new Paragraph("                       TOTAL           Rs." + ((totalPrice * 0.50)) + "                     ", Calibri11);
                    p2.Alignment = Element.ALIGN_CENTER;
                    p2.SpacingBefore = 30f;
                    pdfDocument.Add(p2);
                    p5.Alignment = Element.ALIGN_CENTER;
                    p5.SpacingBefore = 30f;
                    pdfDocument.Add(p5);
                    p6.Alignment = Element.ALIGN_CENTER;
                    p6.SpacingBefore = 10f;
                    pdfDocument.Add(p6);
                    Paragraph p8 = new Paragraph("CANCELLATION POLICY\n• Reservations made over 11-16 Sep 2018, 28-31 Dec 2018, 1-4 Jan 2019, 8-10 Aug 2019 and 28 Dec 2019 - 4 Jan 2020 require full pre-payment and are non-cancellable, non-amendable and non-refundable. The entire period of your stay, inclusive of nights before and after the dates listed above, will be charged to your credit card upon reservation.\n• Cancellation of and/or amendments to your reservation must be made 48 hours (i.e., by 4pm Singapore time) prior to your arrival date.\n• Cancellation or amendment made within 48 hours of arrival will incur a cancellation fee of one night's room charge (inclusive of any applicable prevailing government tax).\n• In the event of no-show, a fee of one night's room charge (inclusive of any applicable prevailing government tax) will be charged to your credit card provided at the time of reservation.");
                    p8.Alignment = Element.ALIGN_LEFT;
                    p8.SpacingBefore = 20f;
                    pdfDocument.Add(p8);
                    pdfDocument.Close();
                    //.RegisterStartupScript(this, GetType(), "YourUniqueScriptKey", " $('#MyModal').modal('show') ;", true);
                    Response.ContentType = "application/pdf";
                    Response.AppendHeader("content-disposition", "attachment;filename=hotel.pdf");
                    Response.Cookies["cookie"].Value = "cookie value";
                    Response.Cookies["cookie"].Expires = DateTime.Now.AddMinutes(1); 
                    Response.Write(pdfDocument);
                    Response.Flush();
                    Response.End();
                }
                catch (Exception e)
                {
                    System.Diagnostics.Debug.WriteLine(e.Message);
                }
            }

            protected void btnSubmit_Click1(object sender, EventArgs e)
            {
                CancelBookingBal bal = new CancelBookingBal();

                int BookingID = Convert.ToInt32(bid.Value);
                int uId = Convert.ToInt32(uid);
                int amount = 0;
                if (bal.updateUser(BookingID, uId))
                {
                    amount = UserBookingBal.getBookingAmt(BookingID);

                    BillDownloader(uId, BookingID, amount);
                }
            }
        }
    }

The aspx page is as follows

    <%@ Page Title="" Language="C#" MasterPageFile="~/UserView/UserMasterPage.Master" AutoEventWireup="true" CodeBehind="CancelBooking.aspx.cs" Inherits="HotelReservation.UserView.CancelBooking" ClientIDMode="Static" EnableViewState="true" %>

    <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    </asp:Content>
    <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder2" runat="server">

        <style>
            .hidden { display: none; }
        </style>

        <div class="container">
            <div class="row">
                <div class="form-control">
                    <br />
                    <br />
                    <h1>Cancel Booking</h1>
                    <br />
                    <br />

                    <div class="form-group">
                        <label for="bno">Enter the booking number to cancel:</label>
                        <input type="text" class="form-control" id="bid" placeholder="Enter Number" name="bno" runat="server" />
                    </div>

                    <asp:Button ID="btnSubmit" runat="server" Text="Submit" CssClass="btn btn-primary" OnClick="btnSubmit_Click1"   />
                   <%-- <button type="submit" id="cancelbtn" class="btn btn-primary" data-toggle="modal" runat="server">Submit</button>--%>
                </div>

                <div class="modal" id="MyModal">
                    <div class="modal-dialog">
                        <div class="modal-content">

                            <!-- Modal Header -->
                            <div class="modal-header">
                                <h4 class="modal-title">Modal Heading</h4>
                                <button type="button" class="close" data-dismiss="modal">&times;</button>
                            </div>

                            <!-- Modal body -->
                            <div class="modal-body">
                                You have successfully cancelled the Reservation !!!
                            </div>

                            <!-- Modal footer -->
                            <div class="modal-footer">
                                <button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
                            </div>

                        </div>
                    </div>
                </div>

            </div>
        </div>

    </asp:Content>
    <asp:Content ID="Content3" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    </asp:Content>

I have tried with scriptmanager to open the modal

 ScriptManager.RegisterStartupScript(this, GetType(), "YourUniqueScriptKey", " $('#MyModal').modal('show') ;", true);

I want to show modal to popup after the pdf gets downloaded.

Dale K
  • 25,246
  • 15
  • 42
  • 71
Gourab Konar
  • 160
  • 3
  • 15
  • Thats actually very difficult to do, please read this discussion on the subject https://stackoverflow.com/questions/14954121/how-do-i-execute-some-javascript-after-a-file-is-downloaded – Dale K Jan 22 '19 at 03:58

2 Answers2

1

You have to make it like this if your javescript for bootstrap is complete and include to the page:

<script type="text/javascript">

        function openModal() {
            $('#myModal').modal('show');
        }
</script>

.cs Code

 ScriptManager.RegisterStartupScript(this, this.GetType(), "Pop", openModal(), true);

if this not work, Check your bootstrap javascript.

This code:

 protected void btnSubmit_Click1(object sender, EventArgs e)
        {
            CancelBookingBal bal = new CancelBookingBal();

            int BookingID = Convert.ToInt32(bid.Value);
            int uId = Convert.ToInt32(uid);
            int amount = 0;
            if (bal.updateUser(BookingID, uId))
            {
                amount = UserBookingBal.getBookingAmt(BookingID);


               ScriptManager.RegisterStartupScript(this, GetType(), 
              "YourUniqueScriptKey", " $('#MyModal').modal('show') ;", 
              true);
            }
        }

Modal button ok on click

protected Modalbutton_onClick(object sender, EventArgs e)
{
   BillDownloader(uId, BookingID, amount);//Provide parameter on top 
}

Before this:

Modalbutton_onClick

You already check that the file is exists. The modal must throw a message first if file exist or not.

Vijunav Vastivch
  • 4,153
  • 1
  • 16
  • 30
1

Since you are using the cookies You can read it via jquery and invoke the modal.

  1. You need to include the cookie.download.js file - I am pasting it here

function getCookie(name) {
    var parts = document.cookie.split(name + "=");
    if (parts.length == 2) return parts.pop().split(";").shift();
}

function expireCookie(cName) {
    document.cookie =
        encodeURIComponent(cName) + "=deleted; expires=" + new Date(0).toUTCString();
}




var downloadTimer;
var attempts = 10;

// Prevents double-submits by waiting for a cookie from the server.
function blockResubmit() {
    var downloadToken = setFormToken();
    downloadTimer = window.setInterval(function () {
        var token = getCookie("cookie");
        if ((token == downloadToken) || (attempts == 0)) {

            $('#myModal').modal({
                backdrop: 'static',
                keyboard: false
            });
            $("#btnSubmit").removeAttr("disabled");
            unblockSubmit();
        }

        attempts--;
    }, 1000);
}

function unblockSubmit() {
    window.clearInterval(downloadTimer);
    expireCookie("cookie");
    attempts = 30;
}
  1. On button client click add this

  $("#btnSubmit").click(function () {
        if ($("#form1").valid()) {
          
            blockResubmit();
                
        }
    });
  1. On the server side button click add below code ( i think you already have it)

 System.Web.HttpCookie dwldCookie = new System.Web.HttpCookie("cookie", mdCookie.Value);
                                dwldCookie.Expires = DateTime.Now.AddYears(1);

                                Response.Cookies.Add(dwldCookie);
  1. Also dont forget to add below code in your aspx file

 function setFormToken() {
        var downloadToken = makeid();
//Generate a random string using 
        document.getElementById("mdCookie").value = downloadToken;
        return downloadToken;
    }
function makeid() {
  var text = "";
  var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";

  for (var i = 0; i < 5; i++)
    text += possible.charAt(Math.floor(Math.random() * possible.length));

  return text;
}
<input type='hidden' id='mdCookie' name='mdCookie'/>
Ratheesh
  • 549
  • 4
  • 15