すべて、
ページが読み込まれるたびに変数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行目にエラーが発生しています。
助けてくれてありがとう!