Image ActionLink新手Redux

时间:2011-09-18 20:07:53

标签: image asp.net-mvc-3 action helper

我现在已经打了好几个小时,所以我会问......

在ImageActionBuilders的所有示例中,该方法如下所示:

public static class ImageActionLinkHelper 
    { 
        public static string ImageActionLink(this AjaxHelper helper, string imageUrl, string actionName, object routeValues, AjaxOptions ajaxOptions) 
        { 
            var builder = new TagBuilder("img"); 
            builder.MergeAttribute("src", imageUrl); 
            builder.MergeAttribute("alt", ""); 
            var link = helper.ActionLink(builder.ToString(TagRenderMode.SelfClosing), actionName, routeValues, ajaxOptions); 
            return link.ToHtmlString(); 
        } 
    } 

我创建了一个类库,包括方法,在我的项目中引用它,我可以看到它。

View(.chtml)中的调用记录如下:

@jax.ImageActionLink("../../Content/Images/button_add.png", "JobTasksNew", "TrackMyJob",new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "tmjDynamic" })) 

作为C#的新手,第一个参数(这个Ajaxhelper助手)从来没有在这里的任何帖子中的View调用中被引用。

当我构建一个与上面相同的调用时,我机器上的编译器抱怨错过了一个参数。

我错过了什么。如何传递或解决第一个参数?

谢谢。

1 个答案:

答案 0 :(得分:0)

如果您是C#的新手,那么在进入ASP.NET MVC之前首先应该做的就是阅读extension methods in C#。它们是什么以及它们如何工作。真的,这是我给你的个人建议:在进入ASP.NET MVC之前学习C#/ VB.NET。这就像试图在没有发现内燃机的情况下制造汽车一样。

这就是ASP.NET MVC中的HTML帮助程序:扩展方法。在您的示例中,您已在ImageActionLink静态类中定义了ImageActionLinkHelper扩展方法。假设此类在Foo命名空间中定义:

namespace Foo
{
    public static class ImageActionLinkHelper 
    { 
        public static string ImageActionLink(this AjaxHelper helper, string imageUrl, string actionName, object routeValues, AjaxOptions ajaxOptions) 
        {
            ...
        }
    }
}

您应该将此Foo命名空间放入视图中的范围内,以便您的扩展方法可用:

@using Foo
...
@Ajax.ImageActionLink("../../Content/Images/button_add.png", "JobTasksNew", "TrackMyJob",new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "tmjDynamic" })) 

或者如果您希望它在ASP.NET MVC 3应用程序的所有Razor视图中可用,您应该在<namespaces>文件的~/Views/web.config部分中添加Foo命名空间。