wotney
wotney

Reputation: 1046

Create dynamic html file from code behind and open in a new window

I'm letting my users write their own HTML from my webpage.

When they click the preview button, my code behind needs access to controls on the page (and so I understand I can't use a web method here).

It builds the HTML and saves it as a file on the server.

My question is: Once the file has been made, I want to automatically open the file in a new window for the user to see their handy work.

I'm using vb.net, but happy to receive c# answers.

Thanks folks ! . .

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=--=-=-=--=-=- Thank you very much Jan !!

I still have a slight problem though...
My code goes like this:

If fileExists Then
        Do Until fileExists = False
            tmpFormPreviewFileName = "Test" & GetRandomNumber() & ".html"
            tmpFormPreviewFilePath = Server.MapPath("~") & "Pages\FormPreviews\" & tmpFormPreviewFileName
            fileExists = My.Computer.FileSystem.FileExists(tmpFormPreviewFileName)
        Loop
    End If

    My.Computer.FileSystem.WriteAllText(tmpFormPreviewFilePath, strHTML, False)


    'Now open the file in a new window
    btnPreview.OnClientClick = String.Format("window.open('/Pages/FormPreviews/{0}', 'myPopup', 'width=400,height=500')", tmpFormPreviewFileName)

So, the problem is - I don't know what the filename will be until after the user has clicked the preview button and the OnClientClick event won't fire until the user clicks the button for the 2nd time (which of course creates another HTML file)

-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=--=-=-=-=-=-=--=-=-=--=-=-=-=-=-=-=-=-=-=-=-=- I'm still having problems getting the popup to work. Here's my code at the moment:

'create a JavaScript command for opening the file in popup window
    Dim strScript As String = String.Format("window.open('/Pages/FormPreviews/{0}, 'myPopup', 'width=400,height=500')", tmpFormPreviewFileName)

    'register the JavaScript to be executed when web page loads
    ScriptManager.RegisterStartupScript(Me, Me.[GetType](), "openPopup", strScript, True)
    ScriptManager.RegisterStartupScript(Me, Me.[GetType](), "ShowMsg", "javascript:alert('Test Msg');", True)

My "ShowMsg" fires succesfully, but the line above it (the popup code) doesn't seem to work. Can you see what's going wrong at all ?

Upvotes: 1

Views: 4668

Answers (2)

jdavies
jdavies

Reputation: 12894

I think your missing a quote in your JavaScript (see below)

Dim strScript As String = String.Format("window.open('/Pages/FormPreviews/{0}<-- here  

Try this:

Dim strScript As String = String.Format("window.open('/Pages/FormPreviews/{0}', 'myPopup', 'width=400,height=500')", tmpFormPreviewFileName)

Upvotes: 0

Jan Šotola
Jan Šotola

Reputation: 842

1) First you have to make the saved HTML files accessible through the web. The simplest way is to save them to some subfolder of your website - e.g. let's create a "/GeneratedPages" folder.

When saving a file to this folder, you will need to construct a physical path to this folder. You can use the Server.MapPath method for it.

You will probably also have to set access rights to allow web application wrtting data to the folder.

2) Now let's implement opening of the preview window:

Assuming your Preview button is declared in your ASXP page as follows:

<asp:Button ID="btnPreview" runat="server" Text="Preview" />

Then you have just to add the following statement to code-behind, e.g. to the Page_Load method:

// sample name of one generate file
string pageName = "page1.html";     
btnPreview.OnClientClick = string.Format("window.open('/GeneratedPages/{0}', 'myPopup', 'width=400,height=500')", pageName);

More information about the used window.open method can be found in Javascript reference, e.g. here.

UPDATE: If are constructing the file just after clicking on the button (in a postback), then you can use a RegisterStartupScript method. Your server-side click handler for the preview button can be following:

protected void btnPreview_Click(object sender, EventArgs e)
{
    string tmpFormPreviewFileName;

    // construct the filename and save the file
    // ...

    // create a JavaScript command for opening the file in popup window
    string script = string.Format("window.open('/Pages/FormPreviews/{0}, 'myPopup', 'width=400,height=500')", tmpFormPreviewFileName);

    // registger the JavaScript to be executed when web page loads
    ClientScript.RegisterStartupScript(GetType(), "openPupup", script, true);
}

Upvotes: 1

Related Questions