ne peut pas convertir implicitement le type void en object. .NET MVC PartialViewResult

90

J'ai l'action de contrôleur suivante:

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

    return PartialView(actions);
}

Et le lien d'action suivant (en utilisant t4MVC et la syntaxe du rasoir)

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

Cependant, cela me donne l'erreur:

impossible de convertir implicitement le type void en objet

Pour autant que je sache, l'action du contrôleur est correcte, alors qu'est-ce qui pourrait me donner cette erreur?

MrBliz
la source

Réponses:

126

Comme ça:

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

ou si vous insistez RenderActioncomme ceci:

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

Personnellement, je préfère le premier, fait moins de frappes.

Darin Dimitrov
la source
1
Je vous remercie. Syntaxe géniale là-bas. Je suppose que c'est la manière rasoir de faire <% html au lieu de <% = Html? Quelle est la différence entre Action et Renderaction de toute façon. Phil Haack dit que RenderAction est plus efficace?
MrBliz
2
@ Doozer1979, ouais, exactement, c'est la méthode Razor.
Darin Dimitrov
Cela fonctionne également: {Html.RenderAction (MVC.MeetingActions.ListActions (Model.MeetingId));}, donc l'utilisation de @ n'est pas nécessaire.
FrenkyB
39

Html.Partial devrait également fonctionner :)

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

J'ai eu le même problème. Ce qui a fonctionné pour moi, c'est d'encapsuler l'expression entre accolades .

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

Ewald
la source
Cela a fonctionné pour moi, mais je n'ai aucune idée de pourquoi l'ajout de parenthèses courbantes fonctionnerait. Pourriez-vous préciser ceci?
Brad Thiessen
1
@BradThiessen Cela fonctionne parce que ASP.NET MVC est franchement un framework de mauvaise qualité plein de trous flagrants et de mauvaises décisions de conception. Je viens de tomber sur ça aussi. Qui sait pourquoi, mais ma patience s'épuise avec MVC.
user9993
10
@BradThiessen RenderPartial()est un vide, en utilisant @vous dites le rasoir pour l'imprimer, ce qui n'est pas possible car il ne produit aucun contenu de sortie!
S.Serpooshan le