2013-08-07 46 views
0

我有一个应用程序,从视图,用户需要的报告,并从它在控制器中创建一个参数字符串,并需要在查询字符串创建后打开多个报告URL,但不确定如何:在ASP.NET MVC中打开多个链接?

查看片段:

@Html.EditorFor(model => model.Id) 
@Html.CheckBoxFor(model => model.report1) Report1 
@Html.CheckBoxFor(model => model.report2) Report2 
@Html.CheckBoxFor(model => model.report3) Report3 

<input type="submit" value="Index" /> 

控制器片断

[HttpPost] 
public ActionResult Index(ViewModel model) { 

string parameters="&id="+model"; 

if(model.report1==true) 
{ 
    string report1="http://<urlhere>"+parameters; 
} 
//CONTINUE for the other two reports as well 
} 

我需要在多个选项卡中打开报告。我对它进行了广泛的研究,似乎你无法从控制器打开多个选项卡,所以我很茫然。我考虑将这些网址放在一个列表中,将它们传递给View,并使用JavaScript在页面加载时打开它们,但我真的不确定如何在Javascript和MVC中做到这一点。

+0

也许你可以实现这一点使用PartialView。 – melancia

+2

只显示多个结果的链接。在页面上打开链接可能会使弹出窗口阻止程序动作。要求用户点击链接的可用性要比让他们在他们以前从未见过的浏览器设置对话框的某个地方禁用弹出窗口阻止程序的可疑性要低一些。 – millimoose

+0

根据HTTP协议设计,每个请求只能发送一个文件。通过JavaScript弹出文件也不是一个好主意。您应该考虑将它们发送到一个zip文件中。 – Win

回答

1

正如你已经发现这是不可能的从服务器端,所以通过报告的URL到客户端,使用类似下面的JavaScript:

@if (!String.IsNullOrWhiteSpace(Model.ReportUri)) 
{ 
    <a id="reportLink" href="@Model.ReportUri" target="_blank">REPORT</a> 
    <script type="text/javascript"> 
     var link = document.getElementById('reportLink'); 
     link.click(); 
     link.parentNode.removeChild(link); 
    </script> 
} 

请记住,弹出式窗口拦截很可能会阻止这一点,所以你应该以某种方式告诉用户。也许它是有用的,以保持在你的情况下页面上的链接(所以删除我的脚本的最后一行),让用户有机会当他们被阻止时手动打开它们...