如何在@helper中调用Html.Action?

时间:2014-07-18 20:41:13

标签: asp.net-mvc asp.net-mvc-4

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

当我尝试运行它时,我收到此错误:

  

编译器错误消息:CS1928:'System.Web.WebPages.Html.HtmlHelper'   不包含'Action'的定义和最佳扩展名   方法过载   “System.Web.Mvc.Html.ChildActionExtensions.Action(System.Web.Mvc.HtmlHelper,   string,string,object)'有一些无效的参数

     

来源错误:

     

@ Html.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)

    }

}

1 个答案:

答案 0 :(得分:2)

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

@helper ScreenDetails(UserStoriesApplication.Models.Screen screen,
     System.Web.Mvc.HtmlHelper Html)

然后当你调用它时只需传入视图的Html对象

@MyHelper.ScreenDetails(model, Html)