我是asp.net的新手。我正在使用VB.net创建一个ASP.net网站。所以这是我的问题
Dim myCounter as Integer = 0
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles Button1.Click
myCounter = myCounter + 1
Label1.Text = myCounter.ToString()
end Sub
正如预期的那样,每次单击按钮时,我总是将标签文本设为0。如何创建全局变量并增加它。
答案 0 :(得分:4)
每次页面回发时,它基本上都是从头开始 - 例如,任何初始化为0的内容都将为零。这是因为服务器对页面的最后一次运行一无所知 - 它只知道你点击了一个向该页面提交表单的按钮,因此它创建了另一个页面实例并重新开始。
如果您需要在回发中保留一个值,标准方法是使用ViewState:
Public Property MyCounter() As Integer
Get
Dim val As Object = ViewState("MyCounter")
Return If(val IsNot Nothing, CInt(val), 0)
End Get
Set(ByVal value As Integer)
ViewState("MyCounter") = value
End Set
End Property
也可以使用Session,它将在所有页面上保持值并在用户会话的生命周期内保持请求。为此,您可以使用上面的相同示例,将ViewState
替换为Session
。
答案 1 :(得分:2)
将此代码放入按钮点击事件
int count=0;
count++;
ViewState["count"] = Convert.ToInt32(ViewState["count"]) + count;
Label1.Text = ViewState["count"].ToString();
答案 2 :(得分:1)
@Rex M建议使用Viewstate很好。
如果计数器不是敏感信息或者你担心有人篡改的东西,那么这里有一个更简单的想法:
您还可以使用<asp:HiddenField>
并将值存储在那里。然后它会在回发之间保持不变,你可以每次都增加它..
答案 3 :(得分:1)
她是另一种不使用隐藏字段,视图状态,会话或缓存的方法
可能不是非常“安全”的东西,但可能会节省你一些时间。
假设初始Label1.Text = 0
Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles Button1.Click
Label1.Text = (Integer.Parse(Label1.Text) + 1).ToString()
end Sub
答案 4 :(得分:0)
每次请求都会重新创建您的页面类...所以myCounter下次不会存在。
你可以
取决于你想要做什么
答案 5 :(得分:0)
您可以使用查看次数:---
button_click事件的代码..
ViewState["count"] = Convert.ToInt32(ViewState["count"])+1;
Label2.Text = "This button has been clicked " + ViewState["count"].ToString() + " times";
答案 6 :(得分:0)
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
ViewState["Count"] = 0;
}
}
protected void btnCount_Click(object sender, EventArgs e)
{
ViewState["Count"] = (int)(ViewState["Count"]) + 1;
lblCount.Text = "Page Visited " +ViewState["Count"].ToString() +" times !";
//Response.Write(ViewState["Count"].ToString());
}