问题
In my App_code
, I have a helper function called FormatTelephone(string number)
in Formatter.cshtml
. I tried to access it in a partial view by @Formatter.FormatTelephone(number)
. When I test it, it says
Compiler Error Message: CS0103: The name 'Formatter' does not exist in the current context
What is the likely cause of it? Thanks!
回答1:
I ran into this exact problem when deploying the site onto another server. Make sure the App_Code/Formatter.cshtml file is actually copied to the server! My mistake was the file has a build action that was set to 'None'. Right click on the file and select Properties, and then set the Build Action to 'Content'.
NOTE:
If you don't have asp.net mvc 3/4 installed make sure the following dlls are in your bin folder.
- System.Web.Mvc
- Microsoft.Web.Infrastructure
- System.Web.Razor
- System.Web.WebPages
- System.Web.WebPages.Razor
Scott Hanselman has a blog post about what might be causing your issue. BIN Deploying ASP.NET MVC 3 with Razor to a Windows Server without MVC installed
回答2:
The following works for me in ~/App_Code/Formatter.cshtml
:
@helper FormatTelephone(string number)
{
<div>Formatted @number</div>
}
and then in some view:
@Formatter.FormatTelephone("123")
回答3:
I ran into a similar problem. My issue was that I was using razor generator and the name.generated.cs file "Build Action" property was "None" and it needs to be "Compile". The "Build Action" property or the name.cs file was "Content" as per the answer and this explains why the cshtml files calling the method could "see" the method, intellisense worked, I could jump into the definition of the method from the cshtml file. The generated.cshtml file though did not compile.
Change the "Build Action" to "Compile". I am surprised that it was not this already TBH.
I hope this saves someone an hour of mindless repetition.
来源:https://stackoverflow.com/questions/7839435/razor-helper-in-app-code-cannot-be-accessed