2016-07-19 16 views
0

私はasp.netの初心者ですが、現在はログイン機能付きのMVC4でWebページアプリケーションを実行しています。 私のインデックスのアクションメソッドはthis-同じコントローラ内の別のアクションメソッドからアクションメソッドにリダイレクト

public ActionResult Index() 
    { 
     var PageModelList1 = new DataAccessLayer.DataAccess().GetPageInfo(); 
     ViewData["MenuList"] = PageModelList1.PageModelList; 
     return View(); 
    } 

のように見え、私のログインアクションメソッドがlike-に見える

[HttpPost] 
    public ActionResult LogIn(LogInModel model, string returnUrl) 
    { 
     if (ModelState.IsValid) 
     { 
      var PageModelList1 = new DataAccessLayer.DataAccess().GetPageInfo(model.UserName,model.Password); 
      ViewData["MenuList"] = PageModelList1.PageModelList; 

      return RedirectToAction("Index", "MyController"); 
     } 
      ModelState.AddModelError("", "login failed"); 

     return PartialView("_LogIn", model); 
    } 

私は私が正常にログインしたときに、(「インデックス」、「ダイモスRedirectToActionで必要なもの")が行われますが、 'MenuList'にはLogInアクションメソッドから新しい 'MenuList'があるはずです。どうすればいい?

+0

データストアにユーザー名とパスワードを渡すだけでなく、[ID](http://www.asp.net/identity/overview/getting-started/introduction-to-aspnet-identity)とユーザを正しくログインさせてから 'Index'で' User.Identity.IsAuthenticated'と 'User.Identity.Name'を使って適切な情報を取得することができます。 –

答えて

0

RedirectToActionは、新しいURLをロケーションヘッダー値としてブラウザに302応答を送信し、ブラウザはそのページに行くという全く新しいリクエストを行います。この新しいリクエストは、以前のリクエストであなたが何をしたか分かりません。だからViewDataは動作しません。 TempDataの使用を検討することもできます。

しかし、TempDataの寿命は、次の要求までです。その後、それはなくなった。ですから、後続のリクエスト(ユーザに表示されるメニューなど)で何かをしたい場合は、ページを読み込むたびにデータベーステーブルから読み込むことをお勧めします。最初の読み込み後にアイテムをキャッシュに保存することで、データベースに不安がある場合にデータベースに一定のヒットを避けることができます。

もう1つの方法は、メニュー項目を「セッション変数」に設定し、そこから読み取ることです。私はそのようなものをセッションに設定することの大きなファンではない。私はそれをキャッシュから読み込む方が好きです(データがdbコールから読み込まれたもの)。

+0

私はこれらの解決策のどれもが素晴らしいとは思わない(2番目の段落は正しい解決策を暗示しているが)問題は、ログインポストで取得されたデータを後続の要求で保持できるようにするためのハッキングではなく、 。現在のところ、ここで実際には「正当な」認証が行われていないことに注意してください。ユーザー名とパスワードの複合キーを使用してデータを取得するように見えます。 –

+0

**しかし 'MenuList'には、LogInアクションメソッド**から新しい 'MenuList'があるはずです。彼は、リダイレクトを行うときにはうまくいかないデータを表示するようにデータを設定したいと思うと思います。私の答えは、彼が行くはずの指針です。もちろん、彼は認証の世話をする必要があります。これを行うにはさまざまな方法がありますが、彼は少しのインターネット検索でそれをできるはずです – Shyju

+0

*しかし、 'MenuList'には、LogInアクションメソッド*からの新しい 'MenuList'があるはずです。ログインポストはその情報を取得するのに適切な場所ではないという適切な点があります。これは、適切な認証が不十分であることを回避するために(そこではIDが失われるため)、セッションや他の手段を使用して次のGETリクエストは、ハックの上にハックするだけです。 –

関連する問題