2013-05-03 69 views
0

傳遞數據我使用這些HTML助手:使用自定義的HTML幫助,以使圖像的鏈接:如何在RouteValueDictionary

/* 
    * 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 
    } 

,我發現有:

How to render an action link with an image?

它工作正常,但我承認,我真的不習慣做這些,有些事我不明白。

例如,現在,有我的形象上的一個鏈接,這樣做:

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

你看,我的控制我的「細節」的動作用一個ID,所以在這種情況下,我d需要鏈接閱讀如下:

/Object/Details/1 

1是我可以在此對象中找到的對象ID。但我不知道怎麼ID傳遞給該對象,因爲該方法在那裏使用RouteDictionaryValue和我不知道是如何工作的,所以我最終有此鏈接:

/Object/Details 

而且,當然,這是行不通的。如何將ID或所需數據傳遞給HtmlHelper以創建實際可用的鏈接?

回答

0

經過很多解決方法之後,我有點想通了!

我不得不改變我的鏈接:

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

... Annd,完美的作品。但是我仍然不明白什麼是RouteValueDictionary,所以隨意發佈,因爲我一定會讀它們!

+2

您可以先閱讀MSDN說明[此處](http://msdn.microsoft.com/zh-cn/library/system.web.routing.routevaluedictionary.aspx) – Iridio 2013-05-03 15:29:33

相關問題