代码之家  ›  专栏  ›  技术社区  ›  name1ess0ne

我自己的htmlhelper在ASP.NET MVC 2中不工作

  •  1
  • name1ess0ne  · 技术社区  · 14 年前

    我在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 回复  |  直到 13 年前
        1
  •  2
  •   p.campbell    14 年前

    你提到过 MVC Futures 项目中的二进制文件?

    也许你 using Microsoft.Web.Mvc; 在从v1升级到v2的过程中被删除或修改。

    您要使用的方法是:

     Microsoft.Web.Mvc.LinkBuilder
    
        2
  •  0
  •   tvanfosson    14 年前

    您要查找的代码在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" ) %>
    
        3
  •  0
  •   Oleksandr Fentsyk    13 年前

    我有更好的答案!

    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);
        }
    }