Добавить к routeValues ​​в методе расширения HtmlHelper

Я хочу создать простое расширение HtmlHelper.ActionLink , которое добавляет значение в словарь значений маршрута. Параметры будут идентичны HtmlHelper.ActionLink , то есть:

public static MvcHtmlString FooableActionLink(
    this HtmlHelper html,
    string linkText,
    string actionName,
    string controllerName,
    object routeValues,
    object htmlAttributes)
{
  // Add a value to routeValues (based on Session, current Request Url, etc.)
  // object newRouteValues = AddStuffTo(routeValues);

  // Call the default implementation.
  return html.ActionLink(
      linkText, 
      actionName, 
      controllerName, 
      newRouteValues, 
      htmlAttributes);
}

Логика того, что я добавляю в routeValues ​​, довольно многословна, поэтому я хочу поместить ее в метод расширения помощник вместо того, чтобы повторять его в каждом представлении.

У меня есть решение, которое, кажется, работает (опубликовано как ответ ниже), но:

  • Это кажется излишне сложным для такой простой задачи.
  • Все приведенные данные кажутся мне хрупкими, например, есть некоторые крайние случаи, когда я собираюсь вызвать исключение NullReferenceException или что-то в этом роде.

Пожалуйста, опубликуйте любые предложения по улучшению или лучшим решениям.

7
задан Dave Mateer 3 February 2012 в 14:35
поделиться