2016-04-30 81 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" }); 
    } 
{ 

重定向後,Request.QueryString["id"]返回null。

我的默認路由配置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的情況下,沒有匹配,所以它的值被添加爲一個查詢字符串值)。你可以使用

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

然而,這將是更容易的參數添加到您的方法

public ActionResult StartBrVisit(string id)