MVC视图找不到我的扩展方法
我创建了一个扩展方法:
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
请注意声明和导入时名称空间大小写的差异。
命名空间区分大小写!
Notice the difference in the case of your namespace when declaring and when importing.
Namespaces are case-sensitive!
您必须在 web.config 中添加命名空间,但在 Views 文件夹 内的命名空间中添加
You must add the namespace in the web.config but in the one inside the Views Folder
尝试关闭 Visual Studio 并再次打开您的解决方案。当事情开始变得奇怪时,有时这会有所帮助。
Try shutting down Visual Studio and opening your Solution again. When things start acting weird, some times this helps.
关闭并重新打开 Visual Studio 就成功了!
Close and reopen Visual Studio did the trick!!
VS 智能感知是否会自动完成您的扩展方法?它会自动完成标准 MVC 帮助程序方法吗?如果不是,则发生视图编译错误。确保视图开头的页面标记中具有正确的“继承”属性值。如果您使用强类型视图,请确保“强类型”存在并编译。
您是否在定义视图的同一项目中定义扩展方法?如果没有,您必须在 mvc 项目中添加引用。最后检查带有扩展方法的程序集(MyComp.Web.Mvc.Html.dll?)是否在应用程序的Bin文件夹中
尝试将命名空间声明添加到web.config文件的pages/namespaces部分放置在 MVC 项目中的 Views 文件夹中(不是主项目 web.config 文件)。
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.
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
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).
原因之一可能是您返回的是 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.