gpt4 book ai didi

c# - RazorGenerator 看不到自定义 cshtml 助手

转载 作者:可可西里 更新时间:2023-11-01 03:10:17 26 4
gpt4 key购买 nike

我在使用 RazorGenerator 时遇到问题:它无法编译使用我的自定义助手的 View :

App_Code/ViewHelper.cshtml

@helper test(System.Web.Mvc.HtmlHelper html)
{
<h4>Test</h4>
}

Views/Test.cshtml

(...)
@ViewHelper.test(this.Html)
(...)

当我尝试编译我的项目时,出现 Test.cshtml 的错误:

The name 'ViewHelpers' does not exist in the current context

我尝试将各种命名空间添加到我的 Views/web.config 文件中:

  <system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.Optimization" />
<add namespace="MyProject" />
<add namespace="Kendo.Mvc.UI" />
<add namespace="MvcSiteMapProvider.Web.Html" />
<add namespace="MvcSiteMapProvider.Web.Html.Models" />
</namespaces>
</pages>
</system.web.webPages.razor>

但没有成功...

我是否遗漏了一些应该包含在这个文件中的命名空间?如果没有,是否有任何其他方法可以让 RazorGenerator 编译 View ?另外,cshtml 助手是否存在于命名空间中?

最佳答案

解决方案:

您需要将此注释放在您在 App_Code 中的帮助程序的开头:

@*
Generator: MvcHelper
GeneratePrettyNames : true
*@

然后在 web.config 中,您需要为 razor 页面配置,您需要添加 RazorGenerator 为这些助手生成的命名空间:

<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="YourWebAppNamespace.App_Code" />
</namespaces>
</pages>
</system.web.webPages.razor>

YourWebAppNamespace 更改为您的默认项目命名空间(可能是您的项目名称):

Default namespace for project in Visual Studio


说明:

RazorGenerator 将您的助手视为普通的 Razor View ,因此生成的代码如下所示:

    [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
[System.Web.WebPages.PageVirtualPathAttribute("~/App_Code/TestHelper.cshtml")]
public partial class _App_Code_TestHelper_cshtml : Komplett.Chrome.Web.Features.Shared.BaseView<dynamic>
{

#line 3 "..\..\App_Code\TestHelper.cshtml"
public System.Web.WebPages.HelperResult HelperName(string name) {

您需要添加这些指令注释来告诉 Razor 生成器创建具有“正常”名称的类(与辅助文件名相同,您可以使用 GeneratePrettyNames 指令)和静态公共(public)函数,因此它可以在其他 View 中使用(通过 Generator: MvcHelper 指令完成)。使用这些指令注释 RazorGenerator 生成 C# 文件,如下所示:

    [System.CodeDom.Compiler.GeneratedCodeAttribute("RazorGenerator", "2.0.0.0")]
public class TestHelper : System.Web.WebPages.HelperPage
{

#line 6 "..\..\App_Code\TestHelper.cshtml"
public static System.Web.WebPages.HelperResult HelperName(string name) {

您现在只需将命名空间添加到 web.config,这样 C# 为其他 View 生成的代码将具有带有此生成的帮助程序的命名空间的 using 语句。

关于c# - RazorGenerator 看不到自定义 cshtml 助手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28466275/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com