首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Razor声明性视图中使用MVC HtmlHelper扩展

在Razor声明性视图中使用MVC HtmlHelper扩展
EN

Stack Overflow用户
提问于 2011-01-17 15:18:29
回答 9查看 71.2K关注 0票数 122

我试图在我的App_Code文件夹中为一个MVC3RTM项目创建一个Razor声明性助手。

我遇到的问题是,像ActionLink这样的HtmlHelper扩展是不可用的。这是因为编译的帮助器派生自System.Web.WebPages.HelperPage,尽管它公开了一个Html属性,但它的类型是System.Web.WebPages.HtmlHelper而不是System.Web.Mvc.HtmlHelper

我遇到的这种错误的一个例子是:

'System.Web.Mvc.HtmlHelper‘不包含'ActionLink’的定义,并且找不到接受类型为'System.Web.Mvc.HtmlHelper‘的第一个参数的扩展方法'ActionLink’(是否缺少using指令或程序集引用?)

我唯一的解决方案是创建我自己的HelperPage并覆盖Html属性:

代码语言:javascript
复制
using System.Web.WebPages;

public class HelperPage : System.Web.WebPages.HelperPage 
{
    // Workaround - exposes the MVC HtmlHelper instead of the normal helper
    public static new HtmlHelper Html
    {
        get { return ((System.Web.Mvc.WebViewPage) WebPageContext.Current.Page).Html; }
    }
}

然后,我必须在每个helper的顶部编写以下代码:

代码语言:javascript
复制
@inherits FunnelWeb.Web.App_Code.HelperPage
@using System.Web.Mvc
@using System.Web.Mvc.Html

@helper DoSomething()
{
    @Html.ActionLink("Index", "Home")
}

这在MVC3中是很难的吗,还是我做错了什么?

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-01-17 17:38:16

看看Marcind's answer对这个问题的回答。您正在经历的是将声明性视图放在App_Code文件夹中的限制。

将你的助手放在App_Code中是可行的,但是有一些限制会影响到某些MVC场景(例如:不能访问标准的MVC Html。帮助器)

票数 42
EN

Stack Overflow用户

发布于 2011-04-06 03:38:52

我为WebPages帮助器创建了一个扩展方法,以便可以访问页面帮助器。

代码语言:javascript
复制
public static HtmlHelper GetPageHelper(this System.Web.WebPages.Html.HtmlHelper html)
{
 return ((System.Web.Mvc.WebViewPage) WebPageContext.Current.Page).Html;
}
票数 38
EN

Stack Overflow用户

发布于 2011-01-18 03:19:47

奥马尔在这里得到了正确的答案,但我想添加一些东西(请随意将奥马尔的回答标记为答案)。

我们在v1中就意识到了这一点,并且无法在产品中获得很好的修复,但是David Ebbo ( ASP.Net团队的一名架构师)发布了一个Visual Studio代码生成器的示例,这基本上是对我们正在寻找的使其正常工作的想法的第一次探索:http://blogs.msdn.com/b/davidebb/archive/2010/10/27/turn-your-razor-helpers-into-reusable-libraries.aspx

试一试,看看你的想法!如果你有什么意见,可以在David的博客上发表。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4710853

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档