2014-10-27 2 views
2

Я хотел бы создать некоторые вспомогательные функции HTML для создания некоторых ссылок с созданным HTML-контентом. Я бы использовал API по умолчанию как можно больше. Это становится сложным, когда я хочу передать объект routevalues. Объект routevalue типа RouteValueDictionary (намеренно?) Громоздко создается в MVC. Я хотел бы передать в object routevalues, как это делается с i.e Html.ActionLink. Сложная часть состоит в том, что мне, кажется, нужен UrlHelper.CreateUrl, который требует RouteValueDictionary. Я проверил, как ActionLink делает это внутри, и использует TypeHelper.ObjectToDictionary. TypeHelper однако является внутренним классом, поэтому я не могу получить к нему доступ. Я мог бы скопировать-вставить вещь, но, кроме того, во-первых, я буду нарушать лицензию, если я это сделаю и не буду лицензировать под лицензией Apache 2.0 или совместимой, а во-вторых, программа копирования-вставки дает мне heeby- jeebies.Создание ссылки с содержимым html

Ниже то, что я грубо хотел бы сделать:

public static MvcHtmlString MyFancyActionLink(this HtmlHelper helper, 
               Foo foo, 
               object routevalues){ 
    TagBuilder inner = fancyFooContent(foo); 
    RouteValueDictionary routedict = TypeHelper.ObjectToDictionary(routevalues); 
    //alas! TypeHelper is internal! 
    string url = UrlHelper.GenerateUrl(null, 
            "myaction", 
            "mycontroller", 
            routedict, 
            helper.ViewContext.RequestContext, 
            true); 
    TagBuilder link = new TagBuilder("a"); 
    link.MergeAttribute("href", url); 
    link.InnerHtml = inner.toString(); 
    return MvcHtmlString.Create(link.ToString()); 
} 
+1

Можете ли вы обновить свою версию? https://aspnetwebstack.codeplex.com/workitem/1737 – RobH

ответ

4

RouteValueDictionary имеет constructor, который принимает объект и использует его свойства для заполнения словаря. Если я не вижу здесь ничего очевидного, вы должны уметь это использовать:

RouteValueDictionary routedict = new RouteValueDictionary(routevalues); 
+0

Я должен. Я понятия не имею, как я это пропустил. – Martijn

Смежные вопросы