2011-08-16 38 views
0

我想把一个不是典型的MVC应用程序创建一条记录并向用户提供记录。如何让ASP.NET MVC打开一个新窗口?

我发现一些在MVC中不友好的东西,因为它们在Web窗体中。我的观点有两个下拉菜单,一个文本框和一个提交按钮。在其中一个下拉列表中,我必须预先填入代码和说明。那部分完成了。

接下来,我让用户在文本框中输入文本。他们点击查找按钮。查找将填充第二个下拉列表。没有视图状态,代码有点不同但可能。接下来,用户点击提交按钮。这是棘手的部分。我需要从视图输入以生成PDF文件,然后打开新的浏览器窗口或选项卡以显示PDF。

我也想在呈现它之前从服务器上删除PDF。在以网页形式呈现之前,我可以删除PDF。我发现Actionlink可以打开一个新窗口,但Actionlink不会将视图上的输入推送到控制器。一个标准表单提交按钮可以,但提交按钮不会打开一个新窗口。控制器无法在新窗口中打开视图。

如何获取用户输入并将该输入推送到控制器,然后将生成的PDF显示到新的浏览器窗口中?最重要的是,我需要从服务器上删除PDF。

回答

0

您可能会返回一个JavaScript的视图,首先打开一个新窗口,然后刷新到另一个视图。如果没有javascript处于活动状态,则视图将不会重新加载,并且可以手动打开链接。如果您在内存中创建PDF,则不需要删除任何东西,只需将内存PDF传输到客户端即可。我是MVC的新手,这只是一个想法。

1

简单的创建一个返回您的PDF流作为FileResult的行动

如果生成的PDF到内存流:(我推荐这个):

public ActionResult DownloadPdf() 
{ 
    // you need some code here to generate the pdf to the memory stream. 

    return File(stream, "application/pdf", "DownloadName.pdf"); 
} 

或者,如果你愿意,使用直接在文件路径:

public ActionResult DownloadPdf() 
{ 
    // get pdf filepath 
    var path = "Chap0101.pdf"; 

    return File(path, "application/pdf"); 
} 

然后在你的HTML代码,你可以使用这样的事情在新窗口中打开。

@Html.ActionLink("Download pdf in new window", "DownloadPdf", "ControllerName", null, new { target = "_blank" })