MVC视图找不到我的扩展方法

发布于 2024-08-19 05:38:19 字数 1229 浏览 7 评论 0原文

我创建了一个扩展方法:

namespace MyComp.Web.MVC.Html
{
    public static class LinkExtensions
    {
        public static MvcHtmlString ActionImageLink(this HtmlHelper htmlHelper, string linkText, string imageSource, string actionName)
        {
            ...
        }
    }
}

我已经从我的 mvc 应用程序引用了程序集,并且我尝试在我的视图中导入命名空间:

<%@ Import Namespace="MyComp.Web.Mvc.Html" %>

并且我还将它添加到 Web 配置文件中:

<pages>
    <controls>
        ...
    </controls>
    <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.Linq"/>
        <add namespace="System.Collections.Generic"/>
        <add namespace="MyComp.Web.Mvc.Html"/>
    </namespaces> 
</pages>

在我的视图中,如果我尝试访问 Html.ActionImageLink 我收到一条错误,指出 System.Web.Mvc.HtmlHelper 不包含接受 System.Web.Mvc.HtmlHelper 第一个参数类型的 ActionImageLink 的定义。我没有看到 System.Web.Mvc.HtmlHelper 的任何 ActionLink 扩展方法,仅适用于 System.Web.Mvc.HtmlHelper,那么它如何适用于 .net 框架,而不适用于我?

I've created an extension method:

namespace MyComp.Web.MVC.Html
{
    public static class LinkExtensions
    {
        public static MvcHtmlString ActionImageLink(this HtmlHelper htmlHelper, string linkText, string imageSource, string actionName)
        {
            ...
        }
    }
}

I've referenced the assembly from my mvc app, and I've tried importing the namespace in my view:

<%@ Import Namespace="MyComp.Web.Mvc.Html" %>

and I've also added it to the web config file:

<pages>
    <controls>
        ...
    </controls>
    <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.Linq"/>
        <add namespace="System.Collections.Generic"/>
        <add namespace="MyComp.Web.Mvc.Html"/>
    </namespaces> 
</pages>

In My view if I try to access Html.ActionImageLink I get an error saying that System.Web.Mvc.HtmlHelper does not contain a definition for ActionImageLink accepting a first argument type of System.Web.Mvc.HtmlHelper. I don't see any of the ActionLink extension methods for System.Web.Mvc.HtmlHelper, only for System.Web.Mvc.HtmlHelper, so how does it work for the .net framework, and not for me?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

以往的大感动 2024-08-26 05:38:19

请注意声明和导入时名称空间大小写的差异。

namespace MyComp.Web.MVC.Html
{
} 

<%@ Import Namespace="MyComp.Web.Mvc.Html" %>
<add namespace="MyComp.Web.Mvc.Html"/>

命名空间区分大小写!

Notice the difference in the case of your namespace when declaring and when importing.

namespace MyComp.Web.MVC.Html
{
} 

<%@ Import Namespace="MyComp.Web.Mvc.Html" %>
<add namespace="MyComp.Web.Mvc.Html"/>

Namespaces are case-sensitive!

挥剑断情 2024-08-26 05:38:19

您必须在 web.config 中添加命名空间,但在 Views 文件夹 内的命名空间中添加

You must add the namespace in the web.config but in the one inside the Views Folder

岁月静好 2024-08-26 05:38:19

尝试关闭 Visual Studio 并再次打开您的解决方案。当事情开始变得奇怪时,有时这会有所帮助。

Try shutting down Visual Studio and opening your Solution again. When things start acting weird, some times this helps.

鲜血染红嫁衣 2024-08-26 05:38:19

关闭并重新打开 Visual Studio 就成功了!

Close and reopen Visual Studio did the trick!!

北风几吹夏 2024-08-26 05:38:19
  1. VS 智能感知是否会自动完成您的扩展方法?它会自动完成标准 MVC 帮助程序方法吗?如果不是,则发生视图编译错误。确保视图开头的页面标记中具有正确的“继承”属性值。如果您使用强类型视图,请确保“强类型”存在并编译。

  2. 您是否在定义视图的同一项目中定义扩展方法?如果没有,您必须在 mvc 项目中添加引用。最后检查带有扩展方法的程序集(MyComp.Web.Mvc.Html.dll?)是否在应用程序的Bin文件夹中

  3. 尝试将命名空间声明添加到web.config文件的pages/namespaces部分放置在 MVC 项目中的 Views 文件夹中(不是主项目 web.config 文件)。

  1. Does the VS intellisense autocompletes your extension method? Does it autocompletes standard MVC helpers methods? If not then the view complilation error occured. Make sure you have the proper "Inherits" attribute value in Page tag at the beginning of the view. If you use strongly typed views make sure the "strong type" exists and compiles.

  2. Do you define the extension method in the same project where the view is defined? If not you have to add the reference in the mvc project. Finally check if the assembly with the extension method (MyComp.Web.Mvc.Html.dll?) is in the Bin folder of the application

  3. Try to add the namespace declaration to the pages/namespaces section of the web.config file placed in your Views folder in MVC project (not the main project web.config file).

恍梦境° 2024-08-26 05:38:19

原因之一可能是您返回的是 MvcHtmlString 而不是字符串。
包括类 MvcHtmlString 的命名空间。看看是否有帮助。

One of the reasons may be you are returning a MvcHtmlString and not a string.
Include the namespace for class MvcHtmlString. See if it helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文