App_Code 中的 Razor @helper 无法访问

7
在我的App_code中,我有一个名为FormatTelephone(string number)的辅助函数在Formatter.cshtml中。我尝试通过@Formatter.FormatTelephone(number)在部分视图中访问它。当我测试时,它显示:

编译器错误消息:CS0103:当前上下文中不存在名称“Formatter”

可能是什么原因?谢谢!
3个回答

7
当我将网站部署到另一台服务器时,遇到了这个确切的问题。请确保 "App_Code/Formatter.cshtml" 文件实际上已被复制到服务器!我的错误在于该文件具有一个设置为“None”的构建操作。右键单击该文件并选择“属性”,然后将构建操作设置为“Content”。
注意: 如果您没有安装 asp.net mvc 3/4,请确保以下 DLL 文件位于 bin 文件夹中。
  • System.Web.Mvc
  • Microsoft.Web.Infrastructure
  • System.Web.Razor
  • System.Web.WebPages
  • System.Web.WebPages.Razor

Scott Hanselman在他的博客中提到了可能导致你的问题的原因。 使用Razor将ASP.NET MVC 3部署到没有安装MVC的Windows服务器


我遇到了相同的情况。在部署服务器上,助手程序无法工作,问题在于默认情况下助手文件的构建操作设置为“无”。感谢您的提示! - vcRobe

0

以下代码适用于我的~/App_Code/Formatter.cshtml文件:

@helper FormatTelephone(string number)
{
    <div>Formatted @number</div>
}

然后在某个视图中:

@Formatter.FormatTelephone("123")

1
是的。我想在多个视图中共享这个帮助函数,所以我把它放在 App_code\Formatter.cshtml 中。我试图在 Views\Shared\_InfoView.cshtml 中访问它。然而,它不起作用,并显示 Formatter 不存在。这很奇怪,因为当我输入时,智能感知识别了 Formatter - uni
@uni,你传递了什么参数?它必须是一个字符串。尝试像我在示例中那样硬编码一个值。 - Darin Dimitrov
是的,我确定它是一个字符串。 - uni
Formatter.cshtml 的构建操作(Build Action) 有什么需要注意的吗? - uni
这是App_Code中唯一的文件,我正在使用@helper。实际上,在将其重构为App_Code之前,它们都可以正常工作。 - uni
显示剩余3条评论

0
我遇到了类似的问题。我的问题是我正在使用 Razor Generator,而 name.generated.cs 文件的“Build Action”属性为“None”,但它需要是“Compile”。根据答案,“Build Action”属性或 name.cs 文件为“Content”,这就解释了为什么 cshtml 文件调用该方法可以“看到”该方法,智能感知也可以工作,我可以从 cshtml 文件跳转到该方法的定义。然而,生成的 generated.cshtml 文件没有编译。
将“Build Action”更改为“Compile”。说实话,我很惊讶它不是这样的。
我希望这可以为某人节省一小时的无意义重复。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接