我让我的用户从我的网页上编写自己的HTML。
当他们点击预览按钮时,我的代码需要访问页面上的控件(所以我知道我不能在这里使用web方法)。
它构建HTML并将其作为文件保存在服务器上。
我的问题是: 文件制作完成后,我想在新窗口中自动打开文件,以便用户查看其便捷的工作。
我正在使用vb.net,但很高兴收到c#的答案。
谢谢大家! 。
- = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - 非常感谢Jan !!
我仍然有一个小问题...
我的代码是这样的:
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)
所以,问题是 - 在用户点击预览按钮之前我不知道文件名是什么,OnClientClick
事件直到用户第二次点击按钮才会触发(当然会创建另一个HTML文件)
- = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - = - 我仍然无法让弹出窗口工作。 这是我目前的代码:
'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)
我的“ShowMsg”成功触发,但它上面的行(弹出代码)似乎不起作用。你能看出出了什么问题吗?
答案 0 :(得分:1)
1)首先,您必须通过网络访问已保存的HTML文件。 最简单的方法是将它们保存到您网站的某个子文件夹中 - 例如让我们创建一个“/ GeneratedPages”文件夹。
将文件保存到此文件夹时,您需要构建此文件夹的物理路径。您可以使用Server.MapPath方法。
您可能还必须设置访问权限,以允许Web应用程序将数据写入文件夹。
2)现在让我们实现预览窗口的打开:
假设您的预览按钮在ASXP页面中声明如下:
<asp:Button ID="btnPreview" runat="server" Text="Preview" />
然后你只需要将以下语句添加到代码隐藏中,例如到Page_Load方法:
// sample name of one generate file
string pageName = "page1.html";
btnPreview.OnClientClick = string.Format("window.open('/GeneratedPages/{0}', 'myPopup', 'width=400,height=500')", pageName);
有关使用过的 window.open 方法的更多信息可以在Javascript参考中找到,例如: here
更新: 如果在单击按钮后(在回发中)构建文件,则可以使用RegisterStartupScript方法。您的服务器端单击处理程序可以是以下预览按钮:
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);
}
答案 1 :(得分:0)
我认为您在JavaScript中缺少引号(见下文)
Dim strScript As String = String.Format("window.open('/Pages/FormPreviews/{0}<-- here
试试这个:
Dim strScript As String = String.Format("window.open('/Pages/FormPreviews/{0}', 'myPopup', 'width=400,height=500')", tmpFormPreviewFileName)