no se puede convertir implícitamente el tipo void en objeto. .NET MVC PartialViewResult

91

Tengo la siguiente acción del controlador:

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

    return PartialView(actions);
}

Y el siguiente enlace de acción (usando t4MVC y la sintaxis de razor)

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

Sin embargo, esto me da el error:

no se puede convertir implícitamente el tipo void en objeto

Por lo que puedo decir, la acción del controlador está bien, entonces, ¿qué podría darme este error?

MrBliz
fuente

Respuestas:

126

Me gusta esto:

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

o si insistes RenderActionasí:

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

Personalmente prefiero el primero, hace menos pulsaciones de teclas.

Darin Dimitrov
fuente
1
Gracias. Sintaxis funky ahí. Supongo que esa es la forma más sencilla de hacer <% html en lugar de <% = Html. ¿Cuál es la diferencia entre Action y Renderaction de todos modos? Phil Haack dice que RenderAction es más eficiente?
MrBliz
2
@ Doozer1979, sí, exactamente, así es como Razor.
Darin Dimitrov
Esto también funciona: {Html.RenderAction (MVC.MeetingActions.ListActions (Model.MeetingId));}, por lo que no es necesario usar @.
FrenkyB
39

Html.Partial debería funcionar también :)

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

Tuve el mismo problema. Lo que funcionó para mí es encapsular la expresión entre corchetes .

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

Ewald
fuente
Esto funcionó para mí, sin embargo, no tengo idea de por qué funcionaría agregar corchetes. Puedes profundizar sobre eso?
Brad Thiessen
1
@BradThiessen Funciona porque ASP.NET MVC es francamente un marco de mala calidad lleno de agujeros evidentes y malas decisiones de diseño. Yo también me encontré con esto. Quién sabe por qué, pero mi paciencia se está agotando con MVC.
user9993
10
@BradThiessen RenderPartial()es un vacío, al usarlo @dices la Razor para imprimirlo, lo cual no es posible ya que no produce ningún contenido de salida.
S.Serpooshan