2009-03-23 28 views

Trả lời

24

đây của tôi, các chức năng cốt lõi của nó làm cho một số quá tải

public static string ImageLink(this HtmlHelper htmlHelper, string imgSrc, string alt, string actionName, string controllerName, object routeValues, object htmlAttributes, object imgHtmlAttributes) 
    { 
     UrlHelper urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url; 
     string imgtag = htmlHelper.Image(imgSrc, alt,imgHtmlAttributes); 
     string url = urlHelper.Action(actionName, controllerName, routeValues); 



     TagBuilder imglink = new TagBuilder("a"); 
     imglink.MergeAttribute("href", url); 
     imglink.InnerHtml =imgtag; 
     imglink.MergeAttributes(new RouteValueDictionary(htmlAttributes), true); 

     return imglink.ToString(); 

    } 
+1

Đây có phải là HtmlString thay vì chuỗi không? với trả về HtmlString mới (imglink.ToString()); ? – Stacker

+4

Chỉ cần chỉ ra rằng htmlHelper.Image() không còn trong MVC4 nữa. –

+0

không thể khai báo htmlHelper.Image() – kasim

34
<a href="<%=Url.RouteUrl(...)%>"><img src="..." alt="..." /></a> 
+0

+1 vì đây là phương pháp nhanh nhất tôi được sử dụng trong số rất nhiều đã trả lời đây. Tôi chỉ xác định hành động và bộ điều khiển trong phương pháp này và nó hoạt động tốt. – nccsbim071

7

Tạo tiện ích trợ giúp của riêng bạn.

public static string Image(this HtmlHelper helper, string src, string alt) 
{ 
    TagBuilder tb = new TagBuilder("img"); 
    tb.Attributes.Add("src", helper.Encode(src)); 
    tb.Attributes.Add("alt", helper.Encode(alt)); 
    return tb.ToString(TagRenderMode.SelfClosing); 
} 
+0

Tuy nhiên, điều này không tạo liên kết hành động hình ảnh. Đó không phải là những gì Zack đang yêu cầu? –

+0

ngay cả khi điều này không trả lời trực tiếp câu hỏi tôi thực sự thích phương pháp này để tạo tiện ích mở rộng trình trợ giúp thẻ hình ảnh. Cảm ơn :) –

9
<%= Html.ActionLink(Html.Image(imageUrl, imageAlt), actionName, controllerName) %> 

có thể làm việc, mở rộng hình ảnh là từ tương lai lắp ráp. Hoặc tự gia hạn.

+0

Không có súp-tag. Tốt đẹp. –

+0

Dường như không hoạt động. Các Html.ActionLink() phương pháp xuất hiện để mã hóa html arg đầu tiên vì vậy tất cả các dấu ngoặc nhọn vv được thoát. – macon

3
<%= Html.RouteLink("PLACEHOLDER", ...).Replace("PLACEHOLDER", "<img src=""..."" alt=""..."" />")%> 
+1

Điều này đòi hỏi một loạt các thao tác chuỗi xấu xí. –

5

tôi không có đủ SO vênh vang để thêm một bình luận, nhưng đây là một lời nhận xét trên MiniScalope's comment above:

UrlHelper urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url;

Tôi sẽ su ggest làm phương pháp này một phần mở rộng HtmlHelper của riêng mình (và đơn giản hóa nó), để tái sử dụng:

private static UrlHelper Url(this HtmlHelper helper) 
{ 
    return new UrlHelper(helper.ViewContext.RequestContext); 
} 
15

Đây là một phiên bản cập nhật mà tôi có từ MiniScalope câu trả lời ở trên. Tôi đang sử dụng VS2010 và ASP.Net MVC 2 Preview

 public static string ImageLink(this HtmlHelper htmlHelper, string imgSrc, string alt, string actionName, string controllerName, object routeValues, object htmlAttributes, object imgHtmlAttributes) 
    { 
     UrlHelper urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url; 
     TagBuilder imgTag = new TagBuilder("img"); 
     imgTag.MergeAttribute("src", imgSrc); 
     imgTag.MergeAttributes((IDictionary<string, string>) imgHtmlAttributes,true); 
     string url = urlHelper.Action(actionName, controllerName, routeValues); 



     TagBuilder imglink = new TagBuilder("a"); 
     imglink.MergeAttribute("href", url); 
     imglink.InnerHtml = imgTag.ToString(); 
     imglink.MergeAttributes((IDictionary<string, string>)htmlAttributes, true); 

     return imglink.ToString(); 

    } 
2

mã này đã được thử nghiệm trên mvc4 ...

public static MvcHtmlString ImageLink(this HtmlHelper htmlHelper, string imgSrc, string alt, string actionName, string controllerName, object routeValues, object htmlAttributes, object imgHtmlAttributes) 
    { 
     UrlHelper urlHelper = ((Controller)htmlHelper.ViewContext.Controller).Url; 
     var imgTag = new TagBuilder("img"); 
     imgTag.MergeAttribute("src", imgSrc); 
     imgTag.MergeAttributes((IDictionary<string, string>)imgHtmlAttributes, true); 
     string url = urlHelper.Action(actionName, controllerName, routeValues); 



     var imglink = new TagBuilder("a"); 
     imglink.MergeAttribute("href", url); 
     imglink.InnerHtml = imgTag.ToString(); 
     imglink.MergeAttributes((IDictionary<string, string>)htmlAttributes, true); 

     return MvcHtmlString.Create(imglink.ToString()); 

    } 
Các vấn đề liên quan