Asp.net mvc 如何从@helper内部调用Html.Action?
我需要显示一个对象的详细信息列表,以及父对象的所有子对象,所以我编写了这个递归帮助器 当我尝试运行它时,会出现以下错误: 编译器错误消息: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吗?这是助手: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
@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)
我已经让它在助手中工作,但我看不出这里出了什么问题。但是我的助手在视图中-我会尝试将它放在一个独立的文件中。工作起来很有魅力。我很惊讶这是必要的。