1

すべて、

ページが読み込まれるたびに変数pageCountを再割り当てしないロジスティックな方法があるのに、署名されていない変数YSOD画面が表示されないのではないかと思っていました。

ページが読み込まれるたびにpageCountをインクリメントしようとしているので、「history.go(pageCount * -1)」(JavaScriptの場合)を強制できます。

pageCountを通常0に割り当てると(たとえば、int pageCount = 0;)、ページが読み込まれるたびに0にリセットされますが、ブランチで初期化すると、プロットされた非表示の入力フィールド値の範囲外になりますC#で(JavaScriptが反対側で取得するため)。

AppStateを試しましたが、次のようにキャストしようとしても、int(またはbool)として機能するのは好きではありません。

(int)AppState["pageCount"];

グローバル(より良い単語がないため)変数をintまたはboolとして宣言する方法、またはページが読み込まれるたびに初期化された値にリセットされない通常の変数を宣言するロジックを適用する方法についての提案はありますか?

var username = "";
var user = "";
var password = "";
var errorMessage = "";
var loginSuccess = "not";
AppState["gActionMessage"] = "";
int pageCount;
if(!IsPost)
{
    pageCount = 1;
}
if(IsPost)
{
    pageCount++;
    username = Request.Form["username"];
    password = Request.Form["password"];

    if(username.IsEmpty() || password.IsEmpty())
    {
        errorMessage = "You must specify both a username and password.";
    }
    else
    {
        if (WebSecurity.UserExists(username) && WebSecurity.GetPasswordFailuresSinceLastSuccess(username) > 4 && WebSecurity.GetLastPasswordFailureDate(username).AddSeconds(120) > DateTime.UtcNow) {
            AppState["gActionMessage"] = "You're account has been locked due to too many failed login attempts. " +
                                        "Please try again in 2 minutes.";
            AppState["gActionMessageDisplayed"] = "not";
            Response.Redirect("~/");
            return;
        }

        if(WebSecurity.Login(username, password, false))
        {
            var db = Database.Open("Users");
            user = (db.QuerySingle("SELECT firstName FROM UserProfile WHERE LOWER(Email) = LOWER(@0)", username)).firstName;

            AppState["gActionMessage"] = "Hello, " + user + "!";
            AppState["gActionMessageDisplayed"] = "not";
            loginSuccess = "is";
            //Response.Redirect("~/");
        }
        else
        {
            errorMessage = "Login failed. Please check your user name and password for errors.";
            loginSuccess = "not";
        }
    }
}

上記のコードは、pageCountが割り当てられていないため、7行目にエラーが発生しています。

助けてくれてありがとう!

4

1 に答える 1

2

AppStateコレクションは参照のコレクションですobjectintor値を格納するboolには、ボックス化されます。

それを読むには、あなたが試したのと同じように、それを箱から出すだけです。ただし、すでに設定されているかどうかわからない場合は、オブジェクト参照として取得し、参照を取得したかどうかを確認する必要があります。実際に参照があることを確認したら、値のボックスを解除できます。

int pageCount;
object p = AppState["pageCount"];
if (p != null) {
  pageCount = (int)p;
} else {
  pageCount = 1; // some default value that you want to use
}
于 2012-10-16T20:56:45.993 に答える