【问题标题】:Html Extension methods are not accessible in MVC Partial Pages在 MVC 部分页面中无法访问 Html 扩展方法
【发布时间】:2012-12-27 09:16:23
【问题描述】:

您好,我正在尝试在 MVC 部分页面中创建一个声明性 Html 辅助方法,一切正常。但是当我想使用内置的 Html 扩展方法时,我发现没有扩展方法。我还检查了视图的 webconfig 文件以添加 System.Web.Mvc.Html 命名空间。一切正常,但我不知道为什么它不起作用。

任何建议都会有所帮助。

编辑:这是我的代码:

@using WebVoter.ViewModel
@using System.Web.Mvc.Html

@helper GetVoteList(IList<VoteQuestionViewModel> voteQuestionList)
{

    <div class="head-panel">
        @*For example ActionLink is not accessible here*@
        @Html.ActionLink(....);

    </div>
}

【问题讨论】:

  • 你能展示你的代码吗?
  • 你添加了using语句吗?与分部类类似,这需要在您的分部视图中。
  • 你是否尝试在视图中显式使用?
  • @DarinDimitrov :我更新了我的帖子。看看
  • @BlueChippy :是的,chippy。看看更新。

标签: c# .net asp.net-mvc asp.net-mvc-partialview


【解决方案1】:

在 Razor 助手中,您没有引用 HtmlHelper。您需要从调用代码中将其作为参数传递:

@helper GetVoteList(HtmlHelper html, IList<VoteQuestionViewModel> voteQuestionList)
{
    <div class="head-panel">
        @html.ActionLink(....)
    </div>
}

当你想从某个视图调用这个助手时,你需要传递引用:

@GetVoteList(Html, ...)

就个人而言,我一直更喜欢为 HtmlHelper 类编写扩展方法,而不是使用那些内联的 Razor 助手。然后它们将被用作标准助手:

@Html.GetVoteList(...)

优点是您不再与 Razor 绑定。扩展方法与视图引擎无关,并且由于它们是 C# 代码,因此可以减少向其他视图引擎的过渡。另一个好处是它们可以进行单元测试。

【讨论】:

  • +1 : 谢谢 Darin,它起作用了,但你能解释一下为什么 partial 没有对 HtmlHelper 的任何引用吗?
  • 我从来没有说过partials没有引用HtmlHelper。部分和视图确实参考了 HtmlHelper。我说的是 Razor 内联助手没有引用 HtmlHelper。我不知道为什么会这样,你得问问 MVC 框架的设计者。我猜这是因为如您所知,Html 是 ViewPage 的属性,但 Razor 内联帮助程序被编译为一些静态函数或其他任何内容,不再对包含页面有任何引用。
【解决方案2】:

Views 文件夹下有一个 web.config。你也可以修改这个配置吗?

【讨论】:

    猜你喜欢
    • 2013-06-05
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    相关资源
    最近更新 更多