C# 如何在WebMatrix C中声明作为整数值或布尔值的(全局?)变量#
全部, 我只是想知道是否有一种合理的方法,可以在每次加载页面时不重新分配变量pageCount,但仍然无法获得未签名的变量YSOD屏幕 我试图在每次加载页面时增加pageCount,以便强制执行“history.go(pageCount*-1)”(在JavaScript中) 如果我通常将pageCount指定为0(例如,int pageCount=0;),每次加载页面时,它都会将其重置为0,但如果我在分支中初始化它,它就超出了用C#绘制的隐藏输入字段值的范围(JavaScript在另一侧拾取) 我尝试过AppState,但它不喜欢作为int(或bool)工作,即使我尝试将其转换为:C# 如何在WebMatrix C中声明作为整数值或布尔值的(全局?)变量#,c#,javascript,jquery,variables,webmatrix,C#,Javascript,Jquery,Variables,Webmatrix,全部, 我只是想知道是否有一种合理的方法,可以在每次加载页面时不重新分配变量pageCount,但仍然无法获得未签名的变量YSOD屏幕 我试图在每次加载页面时增加pageCount,以便强制执行“history.go(pageCount*-1)”(在JavaScript中) 如果我通常将pageCount指定为0(例如,int pageCount=0;),每次加载页面时,它都会将其重置为0,但如果我在分支中初始化它,它就超出了用C#绘制的隐藏输入字段值的范围(JavaScript在另一侧拾取)
(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行
谢谢你的帮助 AppState集合是
对象
引用的集合。要存储int
或bool
值,它将被装箱
要阅读它,只需按您的尝试将其拆开即可。但是,如果您不知道它是否已经设置好,则必须将其作为对象引用,并检查是否有引用。检查是否确实有引用后,可以取消对值的装箱:
int pageCount;
object p = AppState["pageCount"];
if (p != null) {
pageCount = (int)p;
} else {
pageCount = 1; // some default value that you want to use
}
@VoidKing:当您需要对值类型的引用时,就会这样做。在堆上创建一个对象,值存储在该对象中。更多阅读:很好的答案,很好的链接,谢谢!好吧,我想我不能接受这个答案,因为它并不能真正解决问题。无论我做了多少装箱或取消装箱,我仍然必须有一个变量(已经初始化,它将其设置为0,因为它必须被赋值),因为我无法引用AppState。我可以取消对AppState的装箱并将其放入随机对象中,但它将产生相同的结果。我没有得到什么?简言之,我不能这样做:AppState[“pageCount”]++或AppState[“pageCount”]+=1,等等@VoidKing:你不能将
AppState
集合视为一个常规变量。如果要更改集合中的某个值,则需要从集合中读取该值,取消装箱以获取该值,更改该值,然后将该值放回集合中。获取答案中的变量作为示例,然后pageCount++;AppState[“pageCount”]=pageCount
.AppState适用于整个网站,将影响所有用户。也许你只想让单个用户使用Session(有点像AppState)?你能举个例子吗?我想我必须把我所有的AppState都改成Session。。。。。。英雄联盟