Asp.net mvc 如何从@helper内部调用Html.Action?

Asp.net mvc 如何从@helper内部调用Html.Action?,asp.net-mvc,asp.net-mvc-4,Asp.net Mvc,Asp.net Mvc 4,我需要显示一个对象的详细信息列表,以及父对象的所有子对象,所以我编写了这个递归帮助器 当我尝试运行它时,会出现以下错误: 编译器错误消息:CS1928:'System.Web.WebPages.Html.HtmlHelper' 不包含“操作”和最佳扩展的定义 方法重载 'System.Web.Mvc.Html.ChildActionExtensions.Action(System.Web.Mvc.HtmlHelper, 字符串、字符串、对象“”具有一些无效参数 源错误: @Action(“PDF

我需要显示一个对象的详细信息列表,以及父对象的所有子对象,所以我编写了这个递归帮助器

当我尝试运行它时,会出现以下错误:

编译器错误消息:CS1928:'System.Web.WebPages.Html.HtmlHelper' 不包含“操作”和最佳扩展的定义 方法重载 'System.Web.Mvc.Html.ChildActionExtensions.Action(System.Web.Mvc.HtmlHelper, 字符串、字符串、对象“”具有一些无效参数

源错误:

@Action(“PDFUserStories”,“Screen”,new{screenID=Screen.ID})

在我使用部分视图和@Html.Action之前,效果很好,但当我尝试在助手中使用@Html.Action时,效果不好。我可以在助手中使用@Html.Action吗?这是助手:

@helper ScreenDetails(UserStoriesApplication.Models.Screen screen)
{
<div style="page-break-after: always;">
    <div class="box col-12">
        <div class="box-header">
            <h2><i class="fa fa-desktop"></i>@screen.Name</h2>
            <div class="box-icon">

            </div>
        </div>
    </div>
    @if (screen.filename != null)
    {
        <img class="img-responsive screenImage" src="~/Content/ScreenImages/@screen.filename" alt="Screen" />
    }
    <div class="story-details" id="story-details">
        @Html.Action("_PDFUserStories", "Screen", new { screenID = screen.ID })
    </div>
</div>

    foreach(var childScreen in screen.Screen1)
    {
       @ScreenDetails(childScreen)

    }

}
@helper屏幕详细信息(UserStoriesApplication.Models.Screen)
{
@屏幕名称
@如果(screen.filename!=null)
{
}
@Action(“PDFUserStories”,“Screen”,new{screenID=Screen.ID})
foreach(screen.Screen1中的var childScreen)
{
@屏幕详细信息(儿童屏幕)
}
}

由于我不知道的原因,Helper类附带的“Html”与视图附带的“Html”不同。助手位于System.Web.WebPages.Html命名空间中,而视图位于System.Web.Mvc命名空间中。这就是为什么它没有你期望的方法。但是,通过将Html对象作为参数传递给助手,可以很容易地解决这个问题。因此,您可以将ScreenDetails助手的签名更改为

@helper ScreenDetails(UserStoriesApplication.Models.Screen screen,
     System.Web.Mvc.HtmlHelper Html)
然后调用它时,只需传入视图的Html对象

@MyHelper.ScreenDetails(model, Html)

我已经让它在助手中工作,但我看不出这里出了什么问题。但是我的助手在视图中-我会尝试将它放在一个独立的文件中。工作起来很有魅力。我很惊讶这是必要的。