Der Typ void kann nicht implizit in ein Objekt konvertiert werden. .NET MVC PartialViewResult

90

Ich habe die folgende Controller-Aktion:

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

    return PartialView(actions);
}

Und der folgende Aktionslink (unter Verwendung von t4MVC und der Rasierersyntax)

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

Dies gibt mir jedoch den Fehler:

Der Typ void kann nicht implizit in ein Objekt konvertiert werden

Soweit ich das beurteilen kann, ist die Controller-Aktion in Ordnung. Was könnte mir diesen Fehler geben?

MrBliz
quelle

Antworten:

126

So was:

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

oder wenn Sie darauf bestehen RenderAction:

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

Persönlich bevorzuge ich die erste, macht weniger Tastenanschläge.

Darin Dimitrov
quelle
1
Danke dir. Funky Syntax dort. Ich nehme an, das ist die rasiermesserscharfe Art, <% html statt <% = Html zu machen. Was ist der Unterschied zwischen Action und Renderaction? Phil Haack sagt, RenderAction ist effizienter?
MrBliz
2
@ Doozer1979, ja, genau, das ist der Razor-Weg.
Darin Dimitrov
Dies funktioniert auch: {Html.RenderAction (MVC.MeetingActions.ListActions (Model.MeetingId));}, daher ist die Verwendung von @ nicht erforderlich.
FrenkyB
39

Html.Partial sollte auch funktionieren :)

@Html.Partial("View", Model);
VladL
quelle
34

Ich hatte das gleiche Problem. Was für mich funktioniert hat, ist, den Ausdruck in geschweifte Klammern zu setzen .

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

Ewald
quelle
Das hat bei mir funktioniert, aber ich habe keine Ahnung, warum das Hinzufügen von Lockenwicklern funktionieren würde. Können Sie das näher erläutern?
Brad Thiessen
1
@BradThiessen Es funktioniert, weil ASP.NET MVC ehrlich gesagt ein schlechtes Framework ist, das voller greller Löcher und schlechter Designentscheidungen ist. Ich bin auch gerade darauf gestoßen. Wer weiß warum, aber meine Geduld lässt bei MVC nach.
user9993
9
@BradThiessen RenderPartial()ist eine Leere, @wenn Sie den Rasierer zum Drucken verwenden, was nicht möglich ist, da er keinen Ausgabeinhalt erzeugt!
Serpooshan