相关疑难解决方法(0)

未找到Razor HtmlHelper Extensions(或其他视图命名空间)

Dunno如果在PR或Beta中发生这种情况,但如果我创建了一个扩展方法HtmlHelper,则在Razor驱动的页面中无法识别:

namespace SomeNamespace.Extensions {
    public static class HtmlExtensions {
        public static string Foo(this HtmlHelper html) {
            return "Foo";
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我把它添加到以下<Namespaces>部分Web.config:

<pages>
  <namespaces>
    <add namespace="System.Web.Mvc" />
    <!-- snip -->
    <add namespace="SomeNamespace.Extensions"/>
  </namespaces>
</pages>
Run Code Online (Sandbox Code Playgroud)

但是在尝试查看页面时会抛出编译错误:

@Html.Foo()
Run Code Online (Sandbox Code Playgroud)

如果我使用WebForms重新创建页面,它可以正常工作.这是怎么回事?

解决方法

如果我@using SomeNamespace.Extensions在我的Razor视图中包含它,那么它可以工作,但我更愿意将它包含在内Web.config

extension-methods html-helper razor asp.net-mvc-3

166
推荐指数
4
解决办法
12万
查看次数

如何向Razor页面添加额外的命名空间而不是@using声明?

我需要使用某种魔法来获取pages/namespaceswebconfig中元素的名称空间吗?

<pages>
    <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.WebPages"/>
        <add namespace="System.Web.Helpers"/>
        <add namespace="MyCustomHelpers"/>
    </namespaces>
</pages>
Run Code Online (Sandbox Code Playgroud)

以上只是想要的工作.我知道命名空间很好,因为当我把它@using MyCustomHelpers放在页面的顶部时它神奇地起作用.

这样我就可以在Html.SomeFunction()不必将@using所有页面放在首位的情况下开始工作

razor asp.net-mvc-3

146
推荐指数
3
解决办法
5万
查看次数