在MVC5中,如何打开新窗口并传递参数?

时间:2018-03-20 22:58:07

标签: javascript html5 asp.net-mvc-5 html5-audio

我想在新窗口中打开音频控件,并将文件名从MVC5视图传递给音频控件。

我可以在MVC5视图中使用以下代码打开一个简单的html页面:

<a href="Music/Music.html"
   onclick="window.open('Music/Music.html',
                         'newwindow',
                         'width=600,height=200');
              return false;">html Link</a>

然后,Music.html页面使用以下代码加载并播放文件:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
  <audio controls>
    <source src="001.mp3" type="audio/mp3"> audio playback requires IE9 or above
  </audio>
</body>
</html>

一切都很好,但我真的想把文件名传递到新页面,所以src加载了我传递的任何文件名。我不知道如何做到这一点,或者是否有更好的方法来使用MVC5的其他功能来做到这一点。

根据Joe Warner提出的答案在原帖后添加:

此代码放在Home控制器的index.vbhtml中:

@Code
  Dim myUrl As String = "Music/Music.html?003.mp3"
End Code

<a href="@myUrl"
   onclick="window.open('@myUrl','_blank','width=600,height=100');
              return false;">
  html link a
</a>

<a href="@myUrl" onclick="myOpenWindow">
  html link b
</a>

@Section Scripts
  <script type="text/javascript">
    function myOpenWindow() {
      window.open('@myUrl', '_blank', 'width=600,height=100').focus();
    }
  </script>
End Section

这是目标Music.html页面

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title></title>
</head>

<body>
  <audio controls>
    <source src="" id="audio" type="audio/mp3"> audio playback requires IE9 or above
  </audio>

  <script>
    document.addEventListener("DOMContentLoaded", function() {
      document.getElementById('audio').src = window.location.search.substr(1)
    });
  </script>
</body>

</html>

对于html link ahtml link b,目标Music.html页面会加载并播放003.mp3。但html link a会打开一个新窗口,html link b会替换现有窗口。

我确定我犯了一个基本错误,但为什么我不能将内联window.open javascript移动到一个函数中,以便它可以被页面上可能存在的其他元素调用?

1 个答案:

答案 0 :(得分:1)

<a href="Music/Music.html" onclick="openWindow">html Link</a>

将一个函数附加到单击,然后打开带有'_blank'的窗口,这将在新窗口或选项卡中打开文档。

function openWindow() {
  window.open("/Music/Music.html?filenameyouwant", "_blank",
    "width=600, height=200"
  ).focus();
}

在源HTML中添加ID

<source src="001.mp3" id="audio" type="audio/mp3">

然后使用javascript选择它并将它的src设置为你去过的url的末尾你想要包装url param的获取直到dom加载之后否则将没有源元素

  

?filenameyouwant

document.addEventListener("DOMContentLoaded", (event) => {
  document.getElementById('audio').src = window.location.search.substr(1)
});