无法隐式将 void 类型转换为 object。.NET MVC PartialViewResult

101

我有以下控制器操作:

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

    return PartialView(actions);
}

以下是使用t4MVC和razor语法的操作链接:

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

然而,这给我带来了以下错误:

无法将 void 隐式转换为 object 类型

据我所知,控制器操作是正确的,那么是什么导致了这个错误?

4个回答

137

像这样:

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

或者如果您坚持要使用这种方式RenderAction

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

就我个人而言,我更喜欢第一个选项,因为这样可以减少击键次数。


1
谢谢。这里的语法很时髦。我猜那是razor的方式,用<%html代替<%=Html?Action和RenderAction之间有什么区别呢?Phil Haack说RenderAction更有效率? - MrBliz
2
@Doozer1979,没错,那就是Razor的方式。 - Darin Dimitrov
1
这也可以工作:{Html.RenderAction(MVC.MeetingActions.ListActions(Model.MeetingId));},因此不必使用@。 - FrenkyB

49

我有同样的问题。对我有用的是将表达式花括号包裹起来。

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


这对我有用,但我不知道为什么添加花括号会起作用。你能详细说明一下吗? - Brad Thiessen
2
@BradThiessen 这个能够工作是因为ASP.NET MVC框架实在是一个糟糕的框架,充满了明显的漏洞和糟糕的设计决策。我也刚刚发现了这一点。谁知道为什么,但我的耐心对MVC已经快要耗尽了。 - user9993
11
@BradThiessen RenderPartial() 是一个 void 方法,使用 @ 告诉 Razor 打印它是不可能的,因为它不会产生任何输出内容! - S.Serpooshan

45

Html.Partial 也应该可以工作 :)

@Html.Partial("View", Model);

6

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接