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?

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.


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


34

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

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


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

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.