2011-03-23 5 views
0

나는 관리 영역이있는 사이트를 가지고 있으며 다음과 같이 다양한 크기의 이미지를 만드는 데 도움이되는 HTML 도우미를 만들었습니다. BuildUrlFromExpression URL에 영역 추가하기

Html.Image<ImageController>(c => c.DisplayImage(img.Filename, 53, 35), "Product Thumbnail") 

public static string Image<T>(this HtmlHelper helper, Expression<Action<T>> action,string alt) where T : Controller 
    { 
     string url = LinkExtensions.BuildUrlFromExpression(helper, action); 
     return string.Format("<img src=\"{0}\" alt=\"{1}\" />", url, alt); 
    } 

오전 데 문제는 string url = LinkExtensions.BuildUrlFromExpression(helper, action);이 URL로 관리 영역을 추가하는 라인입니다, 내 도우미입니다.

http://localhost:57771/Admin/Image/DisplayImage?....
대신 http://localhost:57771/Image/DisplayImage?....

나는 그것이 this보고 문제와 관련되어 생각하지만, 제출 된 해결 방법은 나를 위해 컴파일되지 않습니다. 여기에서 어디로 가야할지 모르겠다면 도움이 될 것입니다.

+0

나는 'RouteValueDictionary'에'area = string.Empty'를 추가하여 이것을 해결했습니다. 이것은 가장 좋은 해결책 인 것처럼 느껴지지만 작동합니다. –

+0

나는 지금 좋고 예쁜 도우미를 포기하기로 결정했다. (대신. 대신 내 액션을 가리키는 이미지 URL로 표준 이미지 태그를 사용하고있다.) @Mike 나는 당신의 제안을 시도하고있다. –

답변

1

나는 더 좋은 대답을했습니다!

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