2012-01-20 14 views
2

私はおそらく非常に愚かな質問がありますが、とにかくそれを持っています。私はもっ​​とそれをロックダウンする前にreturnurlはテスト目的のために長さを持っている場合は、私はちょうどチェックしています見ることができるようにここでMVC 3 ReturnUrlリダイレクトが動作しない

[HttpPost] 
     public ActionResult Index(LogonModel model, string ReturnUrl) 
     { 
      ReturnUrl = Request.QueryString["ReturnUrl"]; 
      if (ModelState.IsValid) 
      { 
       if (UserRepository.validLogin(model.Username, model.Password)) 
       { 
        UserLogRepository.createLogEntry("Log On", " has logged on to the Staff Portal.", "Entry/Exit"); 
        if (ReturnUrl.Length > 1) 
        { 
         return Redirect(Request.QueryString["ReturnUrl"]); 
        } 
        else 
        { 
         return RedirectToAction("Dashboard", "Home"); 
        } 
       } 
       else 
       { 

        ModelState.AddModelError("", Session["Error"].ToString()); 
       } 
      } 
      // If we got this far, something failed, redisplay form 
      return View(model); 
     } 

ログインするための私のコントローラ内のコードです。私の問題は、 "オブジェクト参照がオブジェクトのインスタンスに設定されていません"です。 「(ReturnUrl.Length> 1)場合は、」

今すぐユーザーがサイトからタイムアウトしたとき、私は持っているURLはこれです、このラインを指すこと:あなたが見ることができるように http://localhost/Dispatch2012/Staff/Home?ReturnUrl=Dispatch2012%2FStaff%2FCredential

、これが標準ですMVC 3によって作成されたリダイレクトと、私はReturnUrlを標準クエリ文字列として読み込もうとしましたが、オブジェクトが存在しないと言うたびに読み込みを試みました。私は何が欠けていますか?

+0

インデックスにはどのコントローラが含まれていますか? –

答えて

5

お使いのコントローラが設定されている方法が私には奇妙ですが、のは、それに飛び込むてみましょう:

[HttpPost] 
    public ActionResult Index(LogonModel model, string returnUrl) //changed 
    { 
     ReturnUrl = returnUrl; //changed 
     if (ModelState.IsValid) 
     { 
      if (UserRepository.validLogin(model.Username, model.Password)) 
      { 
       UserLogRepository.createLogEntry("Log On", string.Format("{0} has logged on to the Staff Portal.", model.Username, "Entry/Exit"); //changed 
       if (ReturnUrl.Length > 1) //this should use IsLocalUrl 
       { 
        return Redirect(Request.QueryString["ReturnUrl"]); 
       } 
       else 
       { 
        return RedirectToAction("Dashboard", "Home"); 
       } 
      } 
      else 
      { 

       ModelState.AddModelError("", Session["Error"].ToString()); 
      } 
     } 
     // If we got this far, something failed, redisplay form 
     return View(model); 
    } 

いくつかのこと:それはだことを確認するためにチェックする

  1. あなたreturnUrlニーズローカルURL。これを行うにはいくつかの方法があり、ASP.NET MVC 3、it's built inを使用しているためです。

  2. (あなたのビューを正しく設定した場合)なぜReturn_rlをクエリ文字列から引き出しているのですか?すでに渡されていますか?

ビューには次のものがありますか?そのポストは、それが自動的にreturnUrlパラメータとしてIndexアクションに送信されます

<%= Html.Hidden("returnUrl", Url.Encode(Url.Action("ActionToRedirectTo", "ControllerName", new { id = Model.Whatever}))) %> 

もしそうなら、。

私はそれが動作していないので賭けている、あなたは実際にReturnUrlを正しく返信していない、私はビューについて述べたことを確認してください。 URLがReturnUrlであることを確認してください。

また、HttpPostであるため、クエリ文字列には戻りURLが含まれません。

関連する問題