Я пытаюсь расширить Html.ActionLink, поскольку хочу добавить настраиваемые метаданные для общего компонента (в данном случае модального).
Моя цель - еще больше расширить класс LinkExtensions в .Net MVC, который добавит значение в атрибут класса html и добавит настраиваемый атрибут данных, что приведет к следующему:
<a href="/Controller/Action/id" class="show-in-modal style1 style2" data-title="Modal title">Link</a>
Помощник будет похож на метод MVC:
public static MvcHtmlString ModalLink(this HtmlHelper htmlHelper, string title, string linkText, string actionName, string controllerName, object routeValues, object htmlAttributes)
{
// Add 'show-in-modal' class here
// Add 'data-title' attribute here
return htmlHelper.ActionLink(linkText, actionName, controllerName, routeValues, htmlAttributes);
}
@Html.ModalLink("Modal title", "Link", "action", "controller", new { id = "id" }, new { @class = "style1 style2" });
Эта проблема, с которой я столкнулся, заключается в том, что я не могу легко изменить объект htmlAttributes, чтобы добавить имя моего класса и атрибут данных, что имеет смысл, поскольку это анонимный объект только для чтения.
Есть ли способ легко применить требуемые значения / метаданные без необходимости разрывать все на части с помощью отражения и снова собирать вместе?
Я заметил, что у MVC есть перегрузки, которые принимают атрибуты html в форме IDictionary<string, object>
, есть ли метод расширения, который преобразует анонимные типы в изменяемый словарь?
Все, что я получаю при поиске, - это использование метода Html.ActionLink ().
htmlAttributes
. - person Andy Clark   schedule 26.05.2015