C# 将MP3从控制器传递到view.NET CORE MVC

C# 将MP3从控制器传递到view.NET CORE MVC,c#,html,asp.net-core,asp.net-core-mvc,C#,Html,Asp.net Core,Asp.net Core Mvc,我试图将控制器中包含字节[]MP3文件的FileContentResult传递到视图中, 我的问题是,当我这样做(返回一个文件以查看)时,视图会使用音频播放器呈现一个新的HTML页面 我想让一个播放器在我的Html页面上等待来自控制器的音频文件,也许作为一个模型?不确定。 感谢您的帮助 [Route("morse")] public FileResult Morse(string msg) { _decoder.MorseB

我试图将控制器中包含字节[]MP3文件的FileContentResult传递到视图中, 我的问题是,当我这样做(返回一个文件以查看)时,视图会使用音频播放器呈现一个新的HTML页面

我想让一个播放器在我的Html页面上等待来自控制器的音频文件,也许作为一个模型?不确定。 感谢您的帮助

   [Route("morse")]
    public FileResult Morse(string msg)
    {       
        _decoder.MorseBuilder(msg, out byte[] audio, out TimeSpan time);
        return File(audio, "audio/mpeg");   //byte[]
    }
当前我的视图(Index.cshtml)为空

这就是我最后做的:


您可以使用
Url.Action()
方法调用Action方法并加载MP3文件,请参考以下示例代码:

public class AppFile
{
    [Key]
    public int FileID { get; set; }
    public string FileName { get; set; }
    public byte[] Content { get; set; }
    public string ContentType { get; set; }
}
控制器:

    public IActionResult FileIndex()
    {             
        return View(_context.AppFiles.ToList());
    }
    [HttpGet]
    public ActionResult GetVnAudioStream(int id)
    {
        if (id > 0)
        {
            var pronunciation = _context.AppFiles.Where(c=>c.FileID == id).FirstOrDefault().Content;
            if (pronunciation != null && pronunciation.Length > 0)
            {
                return File(pronunciation, "audio/mp3");
            }
        }
        return null;
    }
查看页面:

@model IEnumerable<netcore5.Models.AppFile>
<table class="table">
    <thead>
        <tr>
            <th>
                @Html.DisplayNameFor(model => model.FileID)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.FileName)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.Content)
            </th>
            <th>
                @Html.DisplayNameFor(model => model.ContentType)
            </th> 
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model)
        {
            <tr>
                <td>
                    @Html.DisplayFor(modelItem => item.FileID)
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.FileName)
                </td>
                <td>
                    <audio controls>
                        <source src='@Url.Action("GetVnAudioStream","Home", new {id = item.FileID})' type='audio/mp3' />
                    </audio>
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.ContentType)
                </td> 
            </tr>
        }
    </tbody>
</table>
@model IEnumerable
@DisplayNameFor(model=>model.FileID)
@Html.DisplayNameFor(model=>model.FileName)
@DisplayNameFor(model=>model.Content)
@DisplayNameFor(model=>model.ContentType)
@foreach(模型中的var项目)
{
@DisplayFor(modelItem=>item.FileID)
@DisplayFor(modelItem=>item.FileName)

感谢这个例子,这是一个很好的方法,但不是我想要做的,我想我自己解释得很糟糕。我调用操作的方法是转到localhost:port/morse?msg=text,然后调用操作方法,它接受查询参数,执行其工作并将MP3文件返回到视图。(问题是,返回时,浏览器正在呈现一个新的HTML页面,其中包含一个MP3结果的播放器)。我最终要做的是将文件存储在模型中,从AJAX调用调用action方法。然后存储models属性(“从文本到morse的解码morse”)在一个隐藏的html标记中,调用另一个AJAX调用另一个动作方法,将morse转换为声音,并在成功后用字节填充MP3播放器。