关于在@helper(razor)方法中不可能使用HtmlHelper扩展方法(如ActionLink),这里和任何地方都有很多问题。 现在,在我的项目中,我解决了将当前页面(System.Web.Mvc.WebViewPage页面)作为额外参数传递给@helper的问题,如
@helper HelperFunction(SampleParameter sp, System.Web.Mvc.WebViewPage page)
并使用它(简单地),如
{
...
@page.Html.ActionLink("Title", "Action")
...
}
我想知道它是否太愚蠢:-),以及为什么。当然,最好直接访问调用@helper的页面的当前HtmlHelper,但无论如何......如果这是一个很好的解决方案......
安德烈
答案 0 :(得分:1)
我很好奇为什么这不起作用,所以我看了一下。
当您将代码放入App_Code文件夹时,它会继承自System.Web.WebPages.HelperPage
,虽然它具有Html
属性,但它是System.Web.WebPages.HtmlHelper
而不是System.Web.Mc.HtmlHelper
,这是为什么你找不到像ActionLink这样的东西:(
我快速浏览了一下found this answer from Andrew Nurse:
奥马尔在这里得到了正确的答案,但是 我想添加一些东西(做的感觉 随意标记奥马尔的回应 回答)。
我们在v1和v中意识到了这一点 无法得到一个很好的解决方案 产品,但David Ebbo(建筑师 在ASP.Net团队上)发布了一个样本 一个Visual Studio代码生成器 基本上是第一次探索 我们正在关注的那种想法 使这项工作正常: http://blogs.msdn.com/b/davidebb/archive/2010/10/27/turn-your-razor-helpers-into-reusable-libraries.aspx
尝试一下,看看你的想法! 让大卫知道你是否有评论 张贴在他的博客上。
不幸的是,看起来你甚至无法将帮助器放在App_Code之外的Layout类或_ViewStart中:(