我现在已经打了好几个小时,所以我会问......
在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调用中被引用。
当我构建一个与上面相同的调用时,我机器上的编译器抱怨错过了一个参数。
我错过了什么。如何传递或解决第一个参数?
谢谢。
答案 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命名空间。