【问题标题】:Load Partial View inside another Partial View在另一个局部视图中加载局部视图
【发布时间】:2017-09-01 20:06:10
【问题描述】:

我有一个 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>

现在它开始复杂化了,返回的是 null,我相信这是由于我在 Html.Partial 中创建的 ResultChords 的新实例

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

我已经进行了大量研究,但没有获得 PartialView _Letra 所需的信息。

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

【问题讨论】:

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


    【解决方案1】:

    在_Letra中使用

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

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

    【讨论】:

    • 我可以使用 Html.Action 非常感谢
    • 我在这样使用时遇到错误,如下所示“System.Web.HttpException (0x80004005):HTTP 标头发送后无法重定向”
    【解决方案2】:

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

    _Cifra.cshtml

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

    【讨论】:

    • 当前在 _Cifra 之上是 @model letero.mus.Infra.Models.ResultChords
    • 它总是一个新实例吗?如果是这样,您可以删除 @model 部分,只需在标记中使用 @resultChords
    • 但是在传入Html.Partial的时候不会同样创建一个新的实例吗?
    • 我不知道为什么在这种情况下没有,我必须更多地查看完整的代码,但如果它总是一个新实例,那么这种方式可以正常工作。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-09
    • 1970-01-01
    • 2020-11-07
    • 2015-05-31
    相关资源
    最近更新 更多