使用自定义Html Helper将图像作为链接:如何在RouteValueDictionary中传递数据

本文关键字:RouteValueDictionary 数据 链接 Html 自定义 Helper 图像 | 更新日期: 2023-09-27 18:12:05

我正在使用这些html帮助:

    /*
     * Image Link HTML helper
    */
    /// <summary>
    /// return image link
    /// </summary>
    /// <param name="_helper"></param>
    /// <param name="_imageUrl">URL for image</param>
    /// <param name="_controller">target controller name</param>
    /// <param name="_action">target action name</param>
    /// <param name="_linkText">anchor text</param>
    public static MvcHtmlString ImageLink(this HtmlHelper _helper, string _imageUrl, string _controller, 
                                   string _action, string _linkText)
    {
        return ImageLink(_helper, null, _controller, _action, _linkText, _imageUrl, null, null, null, null);
    }
    /// <summary>
    /// return image link
    /// </summary>
    /// <param name="_helper"></param>
    /// <param name="_imageUrl">URL for image</param>
    /// <param name="_controller">target controller name</param>
    /// <param name="_action">target action name</param>
    /// <param name="_linkText">anchor text</param>
    /// <param name="_htmlAttributes">anchor attributes</param>
    public static MvcHtmlString ImageLink(this HtmlHelper _helper, string _imageUrl, string _controller,
                                          string _action, string _linkText, object _htmlAttributes)
    {
        return ImageLink(_helper, null, _controller, _action, _linkText, _imageUrl, null, null, new RouteValueDictionary(_htmlAttributes), null);
    }
    /// <summary>
    /// return image link
    /// </summary>
    /// <param name="_helper"></param>
    /// <param name="_imageUrl">URL for image</param>
    /// <param name="_controller">target controller name</param>
    /// <param name="_action">target action name</param>
    /// <param name="_linkText">anchor text</param>
    /// <param name="_htmlAttributes">anchor attributes</param>
    /// <param name="_routeValues">route values</param>
    public static MvcHtmlString ImageLink(this HtmlHelper _helper, string _imageUrl, string _controller,
                                          string _action, string _linkText, object _htmlAttributes, object _routeValues)
    {
        return ImageLink(_helper, null, _controller, _action, _linkText, _imageUrl, null, null, new RouteValueDictionary(_htmlAttributes), new RouteValueDictionary(_routeValues));
    }
    /// <summary>
    /// return image link
    /// </summary>
    /// <param name="_helper"></param>
    /// <param name="_id">Id of link control</param>
    /// <param name="_controller">target controller name</param>
    /// <param name="_action">target action name</param>
    /// <param name="_linkText"></param>
    /// <param name="_strImageURL">URL for image</param>
    /// <param name="_alternateText">Alternate Text for the image</param>
    /// <param name="_strStyle">style of the image like border properties, etc</param>
    /// <returns></returns>
    public static MvcHtmlString ImageLink(this HtmlHelper _helper, string _id, string _controller,
                                          string _action, string _linkText, string _strImageURL,
                                          string _alternateText, string _strStyle)
    {
        return ImageLink(_helper, _id, _controller, _action, _linkText, _strImageURL, _alternateText, _strStyle, null, null);
    }
    /// <summary>
    /// return image link
    /// </summary>
    /// <param name="_helper"></param>
    /// <param name="_id">Id of link control</param>
    /// <param name="_controller">target controller name</param>
    /// <param name="_action">target action name</param>
    /// <param name="_linkText">anchor text</param>
    /// <param name="_strImageURL">URL for image</param>
    /// <param name="_alternateText">Alternate Text for the image</param>
    /// <param name="_strStyle">style of the image like border properties, etc</param>
    /// <param name="_htmlAttributes">html attribues for link</param>
    /// <param name="_routeValues"></param>
    /// <returns></returns>
    public static MvcHtmlString ImageLink(this HtmlHelper _helper, string _id, string _controller,
                                          string _action, string _linkText, string _strImageURL, string _alternateText,
                                          string _strStyle, IDictionary<string, object> _htmlAttributes, RouteValueDictionary _routeValues)
    {
        // Build the img tag
        TagBuilder image = new TagBuilder("img");
        image.MergeAttribute("src", VirtualPathUtility.ToAbsolute(_strImageURL));
        image.MergeAttribute("alt", _alternateText);
        image.MergeAttribute("valign", "middle");
        image.MergeAttribute("border", "none");
        TagBuilder span = new TagBuilder("span");
        // Create tag builder
        var anchor = new TagBuilder("a");
        var url = new UrlHelper(_helper.ViewContext.RequestContext).Action(_action, _controller, _routeValues);
        // Create valid id
        anchor.GenerateId(_id);
        // Add attributes
        //anchor.MergeAttribute("href", "/" + controller + "/" + action); //form target URL
        anchor.MergeAttribute("href", url);
        anchor.MergeAttribute("class", "actionImage");
        if (_htmlAttributes != null)
            anchor.MergeAttributes(new RouteValueDictionary(_htmlAttributes));
        // place the img tag inside the anchor tag.
        if (String.IsNullOrEmpty(_linkText))
        {
            anchor.InnerHtml = image.ToString(TagRenderMode.Normal);
        }
        else
        {
            span.InnerHtml = _linkText;
            anchor.InnerHtml = image.ToString(TagRenderMode.Normal) + " " + span.ToString(TagRenderMode.Normal);
        }
        // Render tag
        return MvcHtmlString.Create(anchor.ToString(TagRenderMode.Normal)); //to add </a> as end tag
    }

That I found there:

如何渲染带有图像的操作链接?

,它工作得很好,但我承认我真的不习惯做这些,有些事情我不明白。

例如,现在,我的图像上有一个链接,制作成这样:

@Html.ImageLink("objectImage", "Object", "Details", null, Model[i].m_ObjThumbnailLink, Model[i].m_ObjName, null, null, null)

你看,我的"details"动作在我的控制器与id一起工作,所以在这种情况下,我需要链接如下:

/Object/Details/1

1作为我能在这个对象中找到的对象ID。但我不知道如何将id传递给对象因为上面的方法使用了RouteDictionaryValue而我有不知道如何工作,所以我最终得到了这个链接:

/Object/Details

当然,它不起作用。我如何将ID或所需的数据传递给HtmlHelper以创建实际工作的链接?

使用自定义Html Helper将图像作为链接:如何在RouteValueDictionary中传递数据

经过一番努力,我终于弄明白了!

我必须改变我的链接:

@Html.ImageLink("objectImage", "Object", "Details", null, Model[i].m_ObjThumbnailLink, Model[i].m_ObjName, null, null, null)

:

@Html.ImageLink("objectImage", "Object", "Details", null, Model[i].m_ObjThumbnailLink, Model[i].m_ObjName, null, null, new RouteValueDictionary(new { @id = Model[i].m_ObjID}))

…这非常有效。但我仍然不明白什么是RouteValueDictionary,所以请随意张贴,因为我肯定会阅读它们!

相关文章:
  • 没有找到相关文章