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?

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.


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


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);}


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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.