2016-04-30 4 views
2

Я два метода действия в следующем контроллер-Отправить Строка запроса в RedirectToAction MVC

public class VisitMasterController 
{ 
    public ActionResult StartBrVisit() 
    { 
     string id=(Request.QueryString["id"].ToString(); //value=null here 
    } 

    public ActionResult BrNotPresent() 
    { 
     return RedirectToAction("StartBrVisit","VisitMaster" , new { id = "id", name = "name" }); 
    } 
{ 

После Redirect, Request.QueryString["id"] возвращает нулевое значение.

Мой маршрут по умолчанию конфигурации IS-

  context.MapRoute(
     "BR_default", 
     "BR/{controller}/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional }, 
     new[] { "OpinionLeader.Areas.BR.Controllers" } //add this line 
    ); 

Любая помощь?

не
+0

Вы используете маршрут по умолчанию с '.../{ID}'? И почему бы просто не использовать 'public ActionResult StartBrVisit (int id)'? –

+0

@StephenMuecke - да, есть маршрут по умолчанию с именем id. Я обновил свой вопрос. Мне нужно использовать строку здесь. –

+0

Затем просто сделайте метод 'public ActionResult StartBrVisit (string id)' (и вы также можете добавить 'string name'). Значение 'id' добавляется как значение маршрута, а не значение строки запроса, поэтому вы также можете использовать' Request.RequestContext.RouteData.Values ​​["id"] ' –

ответ

1

Вы определили маршрут с параметром имени id поэтому при использовании new { id = "id" }, метод RedirectToAction() находит совпадение, и добавляет значение в качестве значения по маршруту, а не строка запроса значения (в случае name, нет match, поэтому его значение добавляется как значение строки запроса). Вы можете получить доступ к нему с помощью

string id = (string)Request.RequestContext.RouteData.Values["id"] 

Однако, было бы гораздо проще добавить параметр в ваш метод

public ActionResult StartBrVisit(string id) 

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

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