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


90

我有以下控制器操作:

[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隐式转换为对象

据我所知,控制器动作正常,那么什么会给我这个错误呢?

Answers:


126

像这样:

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

或者,如果您坚持RenderAction这样:

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

就我个人而言,我更喜欢第一个,使击键次数减少。


1
谢谢。时髦的语法。我认为这是做<%html而不是<%= Html的剃刀方式?无论如何,Action和Renderaction有什么区别。Phil Haack说RenderAction更有效率吗?
MrBliz

2
@ Doozer1979,是的,确切地说,这就是剃刀方式。
Darin Dimitrov

这也适用:{Html.RenderAction(MVC.MeetingActions.ListActions(Model.MeetingId));},因此不必使用@。
FrenkyB '16


35

我遇到过同样的问题。对我有用的是将表达式包装在大括号中

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


这对我有用,但是我不知道为什么添加冰壶支架会起作用。您能详细说明一下吗?
布拉德·蒂森

1
@BradThiessen之所以起作用,是因为坦率地说ASP.NET MVC是一个伪劣的框架,充满了明显的漏洞和不良的设计决策。我也刚遇到这个。谁知道为什么,但是我的耐心对MVC没什么帮助。
user9993

10
@BradThiessen RenderPartial()是一个空位,用@你说的Razor来打印它是不可能的,因为它不产生任何输出内容!
S.Serpooshan

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.