سؤال

ووHtml.RouteLink () HtmlHelper يعمل كبيرة لوصلات النص. ولكن ما هو أفضل وسيلة لربط الصورة؟

هل كانت مفيدة؟

المحلول

وهنا الألغام، سيصدره الوظيفة الأساسية تجعل بعض الزائدة

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

نصائح أخرى

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

وهذا هو النسخة المحدثة التي لدي من <لأ href = "https://stackoverflow.com/questions/675319/is-there-an-asp-net-mvc-htmlhelper-for-image-links/1227295 # 1227295 "> MiniScalope الإجابة أعلاه. أنا باستخدام VS2010 و ASP.Net MVC 2 معاينة

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

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

ويمكن أن تعمل، وتمديد الصورة هو من التجمع الآجلة. أو جعل ارشادية الخاصة بك.

وإنشاء إضافة مساعد الخاصة بك.

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

وأنا لم يكن لديك ما يكفي SO اختيال لإضافة تعليق، ولكن هذا هو تعليق على تعليق MiniScalope في ما سبق :

<اقتباس فقرة>   

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

وأود أن أقترح جعل هذه الطريقة امتدادا HtmlHelper في حد ذاته (وتبسيط ذلك)، لإعادة استخدامها:

private static UrlHelper Url(this HtmlHelper helper)
{ 
  return new UrlHelper(helper.ViewContext.RequestContext);
}
<%= Html.RouteLink("PLACEHOLDER", ...).Replace("PLACEHOLDER", "<img src=""..."" alt=""..."" />")%>

تم اختبار هذا الرمز على 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());

    }
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top