在另一个局部视图中加载局部视图

Load Partial View inside another Partial View

我有一个 PartialView (_Letra),它从名为 Music 的控制器接收信息......这样

public ActionResult CarregarLetra(string id, string artista, string musica)
{

   return PartialView("_Letra", ArtMus(artista, musica));
}


public ResultLetra ArtMus(string artista, string musica)
{
   //Conteúdo do metodo[..]

   var queryResult = client.Execute<ResultLetra>(request).Data;   

   return queryResult;    
}

到那时,没问题。现在我需要将其他信息传递给同一个 PartialView (_Letra)。此信息位于 PartialView (_Cifra) 中。

所以我在我的音乐控制器中添加了以下几行

    public ActionResult CarregarCifra(string id, string artista, string musica)
{

   return PartialView("_Cifra", GetCifra(artista, musica));
}


public ResultChords GetCifra(string artista, string musica)
{
      var cfrTest= new Cifra();
      var cifra = new ResultChords();

      cifra.chords = cfrTest.GetInfs(artista, musica);

     return cifra;
}

到目前为止一切正常,PartialView _Cifra 收到信息

我搜索了一下,发现我可以在PartialView _Letra中使用Html.Partial来加载我的PartialView _Cifra,然后我就这样做了

我加了

            <div class="item">
            <div class="text-carousel carousel-content">
                <div>
                    @Html.Partial("_Cifra",  new letero.mus.Infra.Models.ResultChords());
                </div>
            </div>
        </div>

现在开始变得复杂了,为什么 return 为空,我相信这是由于我在 Html.Partial

中创建了一个新的 ResultChords 实例

我已经尝试使用 ViewBag 也可以在部分之间转置信息,但可能不正确,因为 return 也为 null。

我已经做了很多研究,但我没有获得 PartialView _Letra 所需的信息。

有更好的方法不使用 Html.Partial,或者正确使用它,我不知道。

您是否总是将新对象传递给第二部分?您可以在新 _Cifra 部分的顶部创建它。

_Cifra.cshtml

@{
    var resultChords = new letero.mus.Infra.Models.ResultChords();
}

在_Letra中使用

@Html.Action("CarregarCifra", "Music", new { id=Model.Id, artista=Model.Artista, musica=Model.Musica });

如果变量在模型上可用,那么您可以将它们传入;否则,使用 Viewbag 并将它们设置在 CarregarLetra