我有一个应用程序从视图中获取一些用户输入,用户想要的报告,并在控制器中从中创建一个参数字符串,我需要在创建查询字符串后打开多个报告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放在一个列表中,将它们传递给View,并使用JavaScript在页面加载时打开它们,但老实说我不确定如何在Javascript和MVC中这样做。
答案 0 :(得分: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>
}
请记住,弹出窗口阻止程序很可能会阻止它,所以你应该以某种方式告诉用户。也许在你的情况下保持页面上的链接是有用的(所以删除我的脚本的最后一行),让用户有机会在被阻止时手动打开它们......