0

我有一个应用程序,它从视图中获取一些用户输入,用户想要的报告,并在控制器中从它创建一个参数字符串,我需要在创建查询字符串后打开多个报告 url,但不确定如何:

查看片段:

@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
}

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

4

1 回答 1

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>
}

请记住,弹出窗口拦截器很可能会阻止这个,所以你应该以某种方式告诉用户。另外,在您的情况下保留页面上的链接(因此删除我脚本的最后一行)以使用户有机会在被阻止时手动打开它们可能很有用...

于 2013-08-07T15:44:22.063 回答