Словарь передачи routeValues к ActionLink

Все,

Понимание 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&amp;Count=1&amp;Keys=System.Collections.Generic.Dictionary%602%2BKeyCollection%5BSystem.String%2CSystem.String%5D&amp;Values=System.Collections.Generic.Dictionary%602%2BValueCollection%5BSystem.String%2CSystem.String%5D">EditDocumentRoles</a>

т.е. это использует отражение и разрабатывает вещи полностью неправильно...

6
задан DaveRandom 25 February 2013 в 21:18
поделиться

4 ответа

RouteValueDictionary в System.Web.Routing , на самом деле, так что да. У этого класса есть конструктор, который принимает объект или IDictionary . Есть одна перегрузка, которая справляется с этим. Таким образом, вместо этого вы можете передать RouteValueDictionary .

РЕДАКТИРОВАТЬ: Я думаю, проблема в этой части:

new Dictionary<string,object>()) 

в конце; он должен быть нулевым. Потому что он будет извлекать общедоступные свойства словаря и использоваться неправильно. Сообщите мне, решит ли проблему изменение значения на null.

1
ответ дан 16 December 2019 в 21:38
поделиться

Я использую MVC 2 и вижу несколько методов Html.ActionLink который принимает IDictionary в качестве параметра для атрибутов Html. По какой-то причине вы не можете использовать один из них? Если вам действительно нужна более короткая форма этого метода с некоторыми значениями по умолчанию, вы можете написать метод расширения адаптера на HtmlHelper.

http://msdn.microsoft.com/en-us/library/system.web.mvc.html.linkextensions.actionlink (VS.90) .aspx

Возможно, я не понимаю ваш вопрос.

0
ответ дан 16 December 2019 в 21:38
поделиться

Космическая корова .. Я потерял исходный идентификатор, который использовал для публикации этого сообщения, поэтому не могу ответить на ваш вопрос напрямую.

Это было с ASP.NET MVC 1.0.

Несмотря на то, что произошла перегрузка, которая, по-видимому, использовала словарь, сгенерированный HTML был не содержимым словаря, а отраженным типом самого словаря, в основном не выполняя того, что я ожидал. В структуре MVC не было способа заставить ее принимать предопределенный список ключей / значений (например, в словаре) и правильно генерировать HTML href. У меня было для создания анонимного объекта, что было невозможно в моем сценарии.

0
ответ дан 16 December 2019 в 21:38
поделиться

Graham,

menu.Attributes - это IDictionary , а метод ожидает IDictionary object > верно? Скопируйте свои ключи и значения в другой словарь, где значения относятся к типу object.

2
ответ дан 16 December 2019 в 21:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: