não pode converter implicitamente o tipo void em objeto. .NET MVC PartialViewResult

90

Tenho a seguinte ação de controlador:

[ChildActionOnly]
public virtual PartialViewResult ListActions(int id)
{
    var actions = meetingActionRepository.GetAllMeetingActions(id);

    return PartialView(actions);
}

E o seguinte link de ação (usando t4MVC e a sintaxe do razor)

<p>
   @Html.RenderAction(MVC.MeetingActions.ListActions(Model.MeetingId))
</p>

No entanto, isso me dá o erro:

não pode converter implicitamente o tipo void em objeto

Até onde eu posso dizer, a ação do controlador está ok, então o que pode estar me dando esse erro?

MrBliz
fonte

Respostas:

126

Como isso:

<p>
    @Html.Action(MVC.MeetingActions.ListActions(Model.MeetingId))
</p>

ou se você insiste RenderActionassim:

<p>
    @{Html.RenderAction(MVC.MeetingActions.ListActions(Model.MeetingId));}
</p>

Pessoalmente, prefiro o primeiro, faz menos toques no teclado.

Darin Dimitrov
fonte
1
Obrigado. Sintaxe funky lá. Presumo que seja a maneira mais fácil de fazer <% html em vez de <% = Html? Qual é a diferença entre Action e Renderaction, afinal. Phil Haack diz que RenderAction é mais eficiente?
MrBliz
2
@ Doozer1979, sim, exatamente, esse é o jeito do Razor.
Darin Dimitrov
Isso também funciona: {Html.RenderAction (MVC.MeetingActions.ListActions (Model.MeetingId));}, portanto, usar @ não é necessário.
FrenkyB
39

Html.Partial também deve funcionar :)

@Html.Partial("View", Model);
VladL
fonte
36

Eu tive o mesmo problema. O que funcionou para mim foi encapsular a expressão em colchetes .

@{Html.RenderPartial("viewName", Model);}

Ewald
fonte
Isso funcionou para mim, mas não tenho ideia de por que adicionar colchetes de ondulação funcionaria. Você pode elaborar sobre isso?
Brad Thiessen
1
@BradThiessen Funciona porque a ASP.NET MVC é, francamente, uma estrutura de má qualidade, cheia de buracos gritantes e decisões de design ruins. Eu também descobri isso. Quem sabe por quê, mas minha paciência está se esgotando com MVC.
user9993
10
@BradThiessen RenderPartial()é um vazio, usar @você diz a Razor para imprimi-lo, o que não é possível, pois não produz nenhum conteúdo de saída!
S.Serpooshan