我需要显示一个对象的详细信息列表,以及父级的所有子对象,所以我写了这个递归帮助器。
当我尝试运行它时,我收到此错误:
编译器错误消息: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)
}
}
答案 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)