我自己的HtmlHelper在Asp.Net MVC 2中不起作用

时间:2010-05-22 13:58:34

标签: asp.net-mvc

我在ASP.NET MVC 1中有HtmlHelper。 现在我不会迁移到ASP.NET MVC 2,但是这个帮助程序不起作用=(


public static string Image(this HtmlHelper helper, string url, string alt)
{
    return string.Format("<img src=\"{0}\" alt=\"{1}\" />", url, alt);
}

public static string ImageLink<T>(this HtmlHelper helper, Expression<Action<T>> linkUrlAction, string imageUrlPath, string altText)
    where T : Controller
{
    string linkUrl = helper.BuildUrlFromExpression(linkUrlAction);//compile time error
    string img = helper.Image(imageUrlPath, altText);

    string outputUrl = string.Format(@"<a href='{0}'>{1}</a>", linkUrl, img);
    return outputUrl;
}
  

错误:'System.Web.Mvc.HtmlHelper'不包含'BuildUrlFromExpression'的定义

我如何解决此错误?

3 个答案:

答案 0 :(得分:2)

您是否引用了项目中的MVC Futures二进制文件?

也许您的using Microsoft.Web.Mvc;在从v1升级到v2时已被删除或修改。

您想要使用的方法是:

 Microsoft.Web.Mvc.LinkBuilder

答案 1 :(得分:0)

您正在寻找的代码位于MVCFutures程序集中。

但是,您可以使用标准库来执行此操作,而不是将实际URL作为字符串,使用页面上的UrlHelper构建它而不是使用表达式。但是,你确实会以这种方式失去强大的动作类型。请注意,如果您这样做,则不需要是通用的。

public static string ImageLink( this HtmlHelper helper,
                                string linkUrl,
                                string imageUrlPath,
                                string altText )
{
    string img = helper.Image(imageUrlPath, altText);

    string outputUrl = string.Format(@"<a href='{0}'>{1}</a>", linkUrl, img);
    return outputUrl;
}

<%= Html.ImageLink( Url.Action( "action", "controller" ),
                    Url.Content( "~/content/images/button.png" ),
                    "Click Me" ) %>

答案 2 :(得分:0)

我有更好的答案!

public static class ImageResultHelper
{
    public static string Image<T>(this HtmlHelper helper, Expression<Action<T>> action, int width, int height)
            where T : Controller
    {
        return ImageResultHelper.Image<T>(helper, action, width, height, "");
    }

    public static string Image<T>(this HtmlHelper helper, Expression<Action<T>> action, int width, int height, string alt)
            where T : Controller
    {
        var expression = action.Body as MethodCallExpression;
        string actionMethodName = string.Empty;
        if (expression != null)
        {
            actionMethodName = expression.Method.Name;
        }
        string url = new UrlHelper(helper.ViewContext.RequestContext, helper.RouteCollection).Action(actionMethodName, typeof(T).Name.Remove(typeof(T).Name.IndexOf("Controller"))).ToString();         
        //string url = LinkBuilder.BuildUrlFromExpression<T>(helper.ViewContext.RequestContext, helper.RouteCollection, action);
        return string.Format("<img src=\"{0}\" width=\"{1}\" height=\"{2}\" alt=\"{3}\" />", url, width, height, alt);
    }
}