mvc 3 Ajax.ActionLink图像无法正常工作

时间:2011-06-07 20:37:24

标签: asp.net-mvc-3 asp.net-ajax html.actionlink

我正在使用vs2010 win7 x64 MVC 3和常规的asp.net开发服务器。以及最新版本的firefox,IE9和chrome。

我有一个强类型视图,我试图通过Arjan Einbu为mvc 3提供的代码asp-net-mvc-ajax-actionlink-with-image的略微修改版本来获取ajax扩展方法。

这是我的扩展方法代码,位于我的mvc网站的App_Code文件夹中的Helper.cs文件中。

public static class HelperExtensions
{
    public static IHtmlString ImageActionLink(this AjaxHelper helper, string imageUrl, string titleText, string actionName, object routeValues, AjaxOptions ajaxOptions)
    {
        var builder = new TagBuilder("img");
        builder.MergeAttribute("src", imageUrl);
        builder.MergeAttribute("title", titleText);
        var link = helper.ActionLink("[replaceme]", actionName, routeValues, ajaxOptions).ToHtmlString();
        return new MvcHtmlString(link.Replace("[replaceme]", builder.ToString(TagRenderMode.SelfClosing)));
    }
}

在我看来,我在顶部定义了@model IEnumerable<Models.SpeciesType>,并且我正在使用...

        @Ajax.ImageActionLink(Url.Content("~/Content/ThumbUp.png"), "Valid/Appropriate", "VoteUp", new {id = item.ID}, new AjaxOptions { HttpMethod = "POST" } ); 

将ajax动作链接插入图像以允许用户对该项目进行投票。上面的代码不起作用,无论我做什么,它总是在无休止的错误后给我错误。它给我的当前错误是......

  

编译器错误消息:CS0121:   呼叫之间是暧昧的   以下方法或属性:   &#39; HelperExtensions.ImageActionLink(System.Web.Mvc.AjaxHelper,   字符串,字符串,字符串,对象,   System.Web.Mvc.Ajax.AjaxOptions)&#39;和   &#39; HelperExtensions.ImageActionLink(System.Web.Mvc.AjaxHelper,   字符串,字符串,字符串,对象,   System.Web.Mvc.Ajax.AjaxOptions)&#39;

这意味着我在同一名称空间中有两个具有相同名称和签名的方法存在冲突,这也是不可能的,因为我只在一个代码文件中定义了一次。所以我认为可能有一个缓存问题,所以我在firefox中进行了ctrl + shift + delete,并完全清除了缓存,历史记录和其他所有内容。刷新页面,我得到同样的错误。我也在IE9和chrome测试过同样的问题。

我停下来启动了asp.net开发服务器,退出了visual studio并重新启动了同样的问题。

磁盘清理了所有内容并运行它。磁盘清理没有删除&#34; C:\ Users \ Dean \ AppData \ Local \ Temp&#34;中的所有文件。所以我手动删除了文件夹中的所有剩余文件,包括&#34;临时ASP.NET文件&#34;夹。然后我又跑了vs2010跑了网站。再次仍然是同样的错误&#34; CS0121:以下方法之间的调用是不明确的......等等&#34;

无论我做什么,我都无法摆脱这个错误。这不是我遇到的唯一错误。在此错误开始持续之前,我也遇到了与mvc无法找到具有正确签名的ImageActionLink方法的错误,即

ImageActionLink(this AjaxHelper<IEnumerable<SpeciesType>> helper, etc etc

我假设的错误与我使用强类型视图的事实有关。

所以试图摆脱&#34;电话是模棱两可的&#34;错误我注释掉了整个ImageActionLink方法并重新编译并再次运行该网站。我收到了这个错误

  

编译器错误消息:CS1061:   &#39;&System.Web.Mvc.AjaxHelper GT;&#39;   不包含的定义   &#39; ImageActionLink&#39;没有延伸   方法&#39; ImageActionLink&#39;接受一个   类型的第一个参数   &#39;&System.Web.Mvc.AjaxHelper GT;&#39;   可以找到(你错过了吗?   使用指令或程序集   引用?)

该错误完全有意义,因为ImageActionLink不再存在。接下来我做的是取消注释ImageActionLink方法重新编译并再次运行网站。确实,同样的呼叫是模棱两可的&#34;错误。

我不知所措。我已经做了我能想到的一切,以清除各种缓存,以排除,评论和取消注释掉代码片段并测试哪些部分中断。但是我被困不能通过&#34;电话是模棱两可的&#34;错误。

任何人都有任何想法如何解决这个问题&#34;电话是模棱两可的&#34;错误,所以我可以继续问为什么我似乎无法使用简单的ajax扩展方法?


我摆脱了&#34;电话是模棱两可的&#34;错误。发生了什么事我复制了Arjan Einbu的mvc 3版本代码asp-net-mvc-ajax-actionlink-with-image

然后我在App_Code文件夹中的visual studio中创建了一个新类,然后执行了ctrl + a ctrl + v,并用HelperExtensions类替换了所有预生成的类模板代码。问题是我没有使用与网站命名空间匹配的命名空间包装HelperExtensions。

关于asp.net如何在没有命名空间的情况下编译代码文件的事情搞砸了。我认为这可能是因为代码是在构建时在主网站dll中编译的,然后当asp.net运行时,它编译它在app_code文件夹中找到的任何代码文件,因此两个具有相同名称的类和相同的方法名称或其他一些。

无论如何,现在我已经解决了这个恶化,我运行我的网站,我得到了错误...

Compiler Error Message: CS1061: 'System.Web.Mvc.AjaxHelper<IEnumerable<Models.SpeciesType>>' does not contain a definition for 'ImageActionLink' and no extension method 'ImageActionLink' accepting a first argument of type 'System.Web.Mvc.AjaxHelper<IEnumerable<Models.SpeciesType>>' could be found (are you missing a using directive or an assembly reference?)

错误读取就好像它找到了ImageActionLink方法但ImageActionLink方法的第一个参数不是AjaxHelper<IEnumerable<Models.SpeciesType>>

类型

错误没有多大意义。是的,ImageActionLink方法的第一个参数是AjaxHelper类型,但不是通用AjaxHelper类型。所以我试着像这样修改ImageActionLink方法声明

  public static IHtmlString ImageActionLink(this AjaxHelper<IEnumerable<SpeciesType>> helper, string imageUrl, string titleText, string actionName, object routeValues, AjaxOptions ajaxOptions)

但我仍然得到同样的错误。 ImageActionLink上的第一个参数是AjaxHelper类型,但是它定义了这个AjaxHelper帮助程序&#34;意思是它是一个扩展方法,应该扩展AjaxHelper类。

我并不真正需要我的index.cshtml文件顶部的@model IEnumerable<Models.SpeciesType>所以我删除了它并尝试再次运行应用程序但同时只出现同样的错误#<} / p>

Compiler Error Message: CS1061: 'System.Web.Mvc.AjaxHelper<dynamic>' does not contain a definition for 'ImageActionLink' and no extension method 'ImageActionLink' accepting a first argument of type 'System.Web.Mvc.AjaxHelper<dynamic>' could be found (are you missing a using directive or an assembly reference?)

任何人都知道我为什么会收到此错误消息?以及如何解决它?

1 个答案:

答案 0 :(得分:0)

在Web.config中你添加了名称空间(你使用的是razor视图)?到页面或

<system.web.webPages.razor>
    <pages pageBaseType="System.Web.Mvc.WebViewPage">
      <namespaces>
        <add namespace="toolbox" />
        <add namespace="aa.App_Code"/>
      </namespaces>
    </pages>
</system.web.webPages.razor>

尝试在此处添加,修改视图(添加一些标记),并检查它是否有效。