Все,
Понимание ASP.NET MVC. Пока неплохо, но этот - небольшие гайки.
У меня есть модель представления, которая содержит словарь атрибутов для гиперссылки, используемой как это:
меню = образцовая переменная
Html.ActionLink(Html.Encode(menu.Name), Html.Encode(menu.Action), Html.Encode(menu.Controller), menu.Attributes, null)
Проблемой является положение "меню. Атрибуты" ожидают объект в форме:
new { Name = "Fred", Age=24 }
Из того, что я могу сказать, этот анонимный объект на самом деле преобразовывается в словарь через отражение так или иначе, НО Вы не можете передать словарь ему во-первых!!!
HTML, сгенерированный для ссылки просто, показывает тип словаря.
Как же я обхожу это? Самое главное - то, что его генерал и контроллер могли установить меню. Атрибуты ранее....
На основе сообщения ниже я попробовал следующее:
Html.ActionLink(Html.Encode(menu.Name), Html.Encode(menu.Action), Html.Encode(menu.Controller), new RouteValueDictionary(menu.Attributes), new Dictionary<string,object>())
но это все еще не работает (я предполагаю, что код внутренне называет общий метод, который берет объекты?). Вышеупомянутое (и мое исходное решение передачи словаря 4-й параматери производит HTML, подобный этому:
<a href="/EditRole?Comparer=System.Collections.Generic.GenericEqualityComparer%601%5BSystem.String%5D&Count=1&Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.String%5D&Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.String%5D">EditDocumentRoles</a>
т.е. это использует отражение и разрабатывает вещи полностью неправильно...
RouteValueDictionary
в System.Web.Routing
, на самом деле, так что да. У этого класса есть конструктор, который принимает объект или IDictionary
. Есть одна перегрузка, которая справляется с этим. Таким образом, вместо этого вы можете передать RouteValueDictionary
.
РЕДАКТИРОВАТЬ: Я думаю, проблема в этой части:
new Dictionary<string,object>())
в конце; он должен быть нулевым. Потому что он будет извлекать общедоступные свойства словаря и использоваться неправильно. Сообщите мне, решит ли проблему изменение значения на null.
Я использую MVC 2 и вижу несколько методов Html.ActionLink который принимает IDictionary в качестве параметра для атрибутов Html. По какой-то причине вы не можете использовать один из них? Если вам действительно нужна более короткая форма этого метода с некоторыми значениями по умолчанию, вы можете написать метод расширения адаптера на HtmlHelper.
http://msdn.microsoft.com/en-us/library/system.web.mvc.html.linkextensions.actionlink (VS.90) .aspx
Возможно, я не понимаю ваш вопрос.
Космическая корова .. Я потерял исходный идентификатор, который использовал для публикации этого сообщения, поэтому не могу ответить на ваш вопрос напрямую.
Это было с ASP.NET MVC 1.0.
Несмотря на то, что произошла перегрузка, которая, по-видимому, использовала словарь, сгенерированный HTML был не содержимым словаря, а отраженным типом самого словаря, в основном не выполняя того, что я ожидал. В структуре MVC не было способа заставить ее принимать предопределенный список ключей / значений (например, в словаре) и правильно генерировать HTML href. У меня было для создания анонимного объекта, что было невозможно в моем сценарии.
Graham,
menu.Attributes - это IDictionary