2016-01-30 2 views
0

У меня проблема. Я хотел бы передать словарь через RedirectToAction через RouteValueDictionary. Есть ли возможность сделать это?Pass Dictionary <string, string> from POST to GET method (как параметры url) ASP.NET MVC

У меня есть метод POST:

[HttpPost] 
public ActionResult Search(MyViewModel _myViewModel) 
{ 
    IDictionary<string, string> parameters = new Dictionary<string, string>(); 

    foreach (var item in _myViewModel) 
    { 
     parameters.Add(item.ValueId, item.ValueName); 
    } 

    return RedirectToAction("Search", new RouteValueDictionary(parameters)); 
} 

Я хотел бы иметь URL вроде этого:

http://localhost:26755/Searcher/Search?id1=value1&id2=value2&id3=value3

Как метод GET должен выглядеть?

[HttpGet] 
public ActionResult Search(**what's here?**) 
{ 
    (...) 
    return View(myViewModel); 
} 

ответ

2

Сначала мы должны исправить Search действие, которое выполняет переадресацию. Вы должны использовать IDictionary<string, object> вместо IDictionary<string, string> если вы хотите, чтобы получить желаемые параметры строки запроса при перенаправлении:

[HttpPost] 
public ActionResult Search(MyViewModel _myViewModel) 
{ 
    IDictionary<string, object> parameters = new Dictionary<string, object>(); 

    foreach (var item in _myViewModel) 
    { 
     parameters.Add(item.ValueId, item.ValueName); 
    } 

    return RedirectToAction("Search", new RouteValueDictionary(parameters)); 
} 

и как только вы сделали, что в целевом действии контроллера вы могли бы просто использовать QueryString словарь по запросу:

[HttpGet] 
public ActionResult Search() 
{ 
    // this.Request.QueryString is the dictionary you could use to access the 
    // different keys and values being passed 
    // For example: 
    string value1 = this.Request.QueryString["id1"]; 

    ... 

    // or you could loop through them depending on what exactly you are trying to achieve: 
    foreach (string key in this.Request.QueryString.Keys) 
    { 
     string value = this.Request.QueryString[key]; 
     // do something with the value here 
    } 

    ... 
} 
+0

Большое спасибо! Теперь работает :) –

 Смежные вопросы

  • Нет связанных вопросов^_^