RouteValueDictionary в проекте библиотеки c # для поддержки помощников расширения HTML? - PullRequest
0 голосов
/ 18 августа 2011

Я пытаюсь реорганизовать решение, которое включает 2 проекта MVC: проект "User-Experience" и соответствующий проект "Система управления контентом"

Я установил независимую библиотеку C # - "Сервисы""- проект в одном пространстве решений, чтобы сделать много вещей.Я хочу поделиться методами расширения Html, используемыми обоими веб-проектами, поместив их в этот «нейтральный» проект, чтобы не было никаких зависимостей между двумя проектами MVC.

У меня проблема с использованием объекта RouteValueDictionary (to.MergeAttributes) в этой библиотеке классов.Я включил ссылку на Sytem.Web.Routing в проекте Services, но когда я пытаюсь включить оператор using в начале файла вспомогательного класса, VStudio отказывается распознавать объявление («Не удается разрешить символ« Маршрутизация »).«).

Это имеет интуитивный смысл - только веб-проект, который может участвовать в маршрутизации URL, должен нуждаться в RouteValueDictionary.

Но, как представляется, обычно используется объект RouteValueDictionary внутри классов htmlhelper, поскольку он может взять анонимный объект, состоящий из пар имя-значение, и преобразовать его в словарь в своем конструкторе следующим образом:

tag.MergeAttributes(new RouteValueDictionary(htmlAttributes));

... тем самым обеспечивая способ передачи любого количества пар имя-значение атрибута тега в тег и относительно простой синтаксис для вызова помощника в представлении:

<%:Html.SomeTag(Model.Id, new {@class = "myClass", title = "myTitle"} %>

Так что, если я могуне использую RouteValueDictionary в моем классе помощника, я вынужден использовать более громоздкий синтаксис для моих представлений, например:

<%:Html.SomeTag(Model.Id, new Dictionary<string, string>{ {"class", "myClass"}, {"title", "myTitle} }%>

ВОПРОС: Итак, есть ли способ переписать класс помощникаполучить более простой синтаксис представления без использования RouteValueDictionary, или есть способ разрешить использование RouteValueDictionary в проекте библиотеки C #?

1 Ответ

1 голос
/ 18 августа 2011

Какую цель проекта вы дали вашему классу?Единственное, о чем я могу думать, это то, что у вас есть цель вашего проекта, установленная на .NET 3.5 Client Profile, которая не поддерживает какие-либо веб-материалы.

ОБНОВЛЕНИЕ : на основе ваших комментариев, окончательное решениебыло добавить ссылку на System.Web.dll в ваш проект.

В .NET 4.0, System.Web.Routing.dll перенаправляется по типу в System.Web.dll.Это связано с тем, что функциональность System.Web.Routing.dll из .NET 3.5 была перенесена в базовую сборку System.Web.System.Web.Routing.dll (v4.0) существует для обеспечения переадресации типов (для обеспечения обратной совместимости при переносе проектов).

Когда вы добавляете ссылку на System.Web.Routing.dll в свойПроект .NET 4.0, вам также необходимо добавить ссылку на System.Web.dll.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...