2013-01-31 6 views
1

Я пытаюсь принять строку запроса формыПреобразование строки запроса словарь (или ассоциативный массив) в словарь

?param[key1]=value1&param[key2]=value2 

и превратить его в словарь в C# MVC 4. Это тривиально, чтобы сделать в PHP, но я не смог найти какой-либо способ воспроизведения этого в C#.

Я знаю, что я могу взять массив через

?param=value1&param=value2 

но оставляет вопросы упорядочения и не столь полезным для моих целей.

В надежде, что это не является ограничением рамки, как я могу реализовать преобразование словарного стиля в C#?

Чтобы уточнить: я не хочу преобразовать строку запроса в NVC, а скорее преобразовать параметры строки запроса в свои собственные NVC. Это NOT так же просто, как ParseQueryString() или объект Request.QueryString.

ответ

1

здесь я установил некоторый код, который будет работать для вас, Дэфо не лучший solutioin но он должен работать.

string basestring = "?param[key1]=value1&param[key2]=value2"; 
     string newstring = basestring.Replace("?", "").Replace("param[", "").Replace("]", ""); 
     var array = newstring.Split('&'); 
     var dictionary = new Dictionary<string, string>(); 
     foreach (var onestring in array) 
     { 
      var splitedstr = onestring.Split('='); 
      dictionary.Add(splitedstr[0],splitedstr[1]); 
     } 
+0

Это решение, к которому я пришел, но он чувствует себя довольно неэлегантно. Я надеялся, что может быть какой-то автоматический синтаксический анализ, похожий на управление MVC строк запроса, таких как '? Param = value1 & param = value2' –

2

Не можете ли вы использовать коллекцию Request.QueryString, которую предоставляет Asp.Net? Поскольку вы используете MVC, это будет на вашем контроллере ControllerContext свойство (находится на объекте HttpContext).

+1

Если это MVC, они должны быть параметрами метода действия. – asawyer

+0

@asawyer Это хороший момент, но хорошо знать, где вы можете найти его, если вы создаете настраиваемое связующее устройство, вы сможете его отключить от 'ControllerContext'. – marteljn

+0

Request.QueryString NVC содержит ключи, к которым можно получить доступ, например qs ["param [key1]"], тогда как я ищу для них доступ как qs ["param"] ["key1"], хотя в идеале я хотел бы просто обращайтесь к параметру ["key1"] напрямую. –

0

Вы также можете попробовать что-то вроде этого

public ActionResult SubmitFormWithFormCollection(FormCollection parameters) 
    { 
     foreach (string param in parameters) 
     { 
      ViewData[param] = parameters[param]; 
     } 

     return View(); 
    } 
Смежные вопросы