none
Динамическое создание анонимного типа RRS feed

  • Вопрос

  • Всем привет!

    Появилась на горизонте сл. задача.

    Нужно на лету создавать анонимные объекты.

    Для чего это понадобилось.

    Пишу wrapper для одной js компоненты под ASP.NET MVC.

    И этот враппер, читает настройки с XML файла.

    В js компоненте есть некоторые действия, которые отправляют/получают данные по определенным ссылкам.

    Формирую ссылки следующим кодом:

    public static class RequestContextExtensions
        {
            public static string GenerateUrl(this RequestContext context, string action, string controller, object routeValues)
            {
                return new UrlHelper(context).Action(action, controller, routeValues);
            }
        }

    В принципе, первая часть Url'а формируется нормально (/home/autosave), а вот параметры никак не могу подставить.

    В Asp.NET MVC обычно для передачи параметров мы используем анонимный тип:

    @Html.Action("AutoSave", "Home", new { Id = 5 })

    Вопрос, как создать подобный тип динамически?

    Нашел несколько способов но они не решили проблему:

    dynamic parameters = new ExpandoObject();
    ((IDictionary<string, object>)parameters).Add("DynamicProperty", 5);

    и вот такой:

    dynamic data = new ExpandoObject();
    
    IDictionary<string, object> dictionary = (IDictionary<string, object>)data;
    dictionary.Add("FirstName", "Bob");
    dictionary.Add("LastName", "Smith");

    Заранее спасибо!

     

    29 апреля 2013 г. 8:27

Ответы

  • Решение оказалось ближе чем я думал! :)

    Action может так же принимать в качестве параметра RouteValueDictionary.

    Таким образом, добавляя в коллекцию ключ и значение, а после, передав эту коллекцию как параметр, на выходе мы получаем корректно сформированный URL.

    • Помечено в качестве ответа vikaz 29 апреля 2013 г. 9:54
    29 апреля 2013 г. 9:54