2016-04-30 25 views
2

にクエリ文字列を送信し、私はリダイレクトした後、次のcontroller-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" }); 
    } 
{ 

で2つのアクションメソッドをした、Request.QueryString["id"]はNULLを返します。

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

は - 私のデフォルトルートの設定すべてのヘルプ?

+0

をパラメータを追加するためにはるかに簡単だろう

string id = (string)Request.RequestContext.RouteData.Values["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の場合には、ノーあり一致するので、その値はクエリ文字列値として追加されます)。あなたは `.../{ID}`でデフォルトルートを使用していますしかし、あなたの方法に

public ActionResult StartBrVisit(string id)