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

时间:2017-04-06 16:43:23

标签: c# asp.net-mvc razor partial-views

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

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>

现在它开始变得复杂,为什么,返回的是null,我相信这是由于我在Html.Partial中创建了一个新的ResultChords实例

我已经尝试过使用ViewBag在Partials之间转置信息,但可能不正确,因为返回也是null。

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

有一种更好的方法是不使用Html.Partial,或正确使用它,因为我不知道。

2 个答案:

答案 0 :(得分:1)

In _Letra use

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

if the variables are available on the model then you can pass them in; otherwise, make use of the Viewbag and set them in CarregarLetra

答案 1 :(得分:0)

Are you always passing a new object to the second partial? You could just create it at the top of the new _Cifra partial.

_Cifra.cshtml

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