0

これは私のホームコントローラーのデフォルトのインデックス機能です

public ActionResult Index()
{
    if (User.Identity.IsAuthenticated)
    {
        return NewPosts();
    }
    else
    {
        ViewBag.Message = "Welcome!";
        return View();
    }
}

これは、同じホーム コントローラー ファイル内の newposts 関数です。

public ActionResult NewPosts()
{
    return View();
}

アカウントにログオンし、ブラウザを閉じます。次に、同じインデックス ページにアクセスして再度開きます。自分の ID (Welcome myusername) が表示されますが、newposts 関数が呼び出されないため、期待どおりに newposts ビューが表示されません。

何故ですか ?どうすればこれを修正できますか?

ありがとうございました。

4

2 に答える 2

0

問題はコントローラーではなく、ブラウザーのキャッシュにあります。

最初のページでCtrl+F5を押すと、許可されていないものとして認識されます。

これは、Webサイトの訪問者にCtrl+F5を押してブラウザを更新させる実際の解決策ではないことを私は知っています。この種のキャッシング動作に取り組むためのインターネット上の記事はたくさんあります。

コードに関する2つの重要なポイント:

1-に変更return NewPosts();

 RedirectToAction("NewPost");

2-[Authorize]属性を持つDecoreacteNewPostsメソッド:

[Authorize]
public ActionResult NewPosts()
{
    return View();
}
于 2012-07-15T17:08:50.533 に答える
0

これを機能させるためのより良い方法は、web.config を介してサイトのデフォルト ページを「NewPosts」として設定することだと思います。次に、web.config で、失敗したログイン ページを「インデックス」として設定できます。これにより、ユーザーがログインすると「NewPosts」ページに送信されます。ブラウザを閉じた場合 (および認証 Cookie の有効期限が切れていない場合)、「NewPosts」ページにも送信されます。ログインしていない場合は、「インデックス」ページに移動します。Web 構成フォーム認証がより堅牢な方法でこれを処理するため、Index アクション メソッドの if ステートメントは不要になります。Web 構成がどのように見えるかの例を次に示します。

<authentication mode="Forms"> 
      <forms loginUrl="~/Home/Index" timeout="2880" defaultUrl="~/Home/NewPosts" > 
      </forms> 
</authentication>

フォーム認証に関する web.config の詳細については、こちらを参照してください。

于 2012-07-15T14:35:47.050 に答える