2009-10-10 9 views
1

asp.net을 처음 사용했습니다. VB.net을 사용하여 ASP.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으로 만들 때마다 단추를 클릭하십시오. 전역 변수를 생성하고이를 증가시키는 방법.

답변

1

@Rex M의 Viewstate 사용에 대한 제안이 좋습니다. .

당신은 또한 <asp:HiddenField>을 사용하고이 값을 저장 할 수 있습니다

카운터가 민감한 정보 또는 다른 사람이 함부로 변경에 대한 걱정 일이없는 경우, 여기 쉽게 생각입니다. 그런 다음 포스트 백간에 유지하고 당신은 매번 증가 할 수 있습니다 .. 그녀는 아마 아마

뭔가 매우 '안전'하지만 당신을 절약 숨겨진 필드, viewstate가, 세션 또는 캐시를 사용하지 않는 다른 방법의

+0

내가 궁금한데 왜 숨겨진 필드를 viewstate보다 쉽게 ​​찾을 수 있습니까? –

+0

텍스트 상자 및 레이블의 값을 설정하는 구문과 비슷하기 때문입니다. 기술적으로 볼 때 viewstate를 사용하는 것은 쉽지만 초보자에게는 @Peter가 viewstate를 아직 이해하는지 알 수 없습니다. 그렇다면 다시 그가 viewstate를 이해하지 못한다고해도, 이것은 그가 그를 배울 수있는 좋은 방법입니다. 이 방법으로 그를 이끌어내는 것만으로도 더 좋은 방향으로 나아갈 수 있습니다. – David

0

각 요청마다 페이지 클래스가 다시 생성되므로 ... 다음 번에 myCounter가 존재하지 않습니다.

할 수 있습니다 중 하나

는 당신이 무슨 말을 하려는지에 따라 응용 프로그램, 세션, 또는 캐시 수집에 넣어 (안 좋은 생각) myCounter 정적 메이크업 do

+0

Session 컬렉션에 넣고 각 버튼을 클릭 할 때마다 코드를 증가시킬 수 있습니까? –

+2

'static'을 사용하지 마십시오!ASP.NET 응용 프로그램에서는 전혀 새로운 것이 아닌 사람들을 위해조차도 불행을 초래할 것입니다. 확실히있는 사람들을 위해. –

4

페이지가 다시 게시 될 때마다 본질적으로 처음부터 다시 시작됩니다. 예를 들어, 0으로 초기화 된 항목은 다시 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 

그것의 수명에 대한 모든 페이지와 요청에 걸쳐 값을 지속 할 세션을 사용할 수도 있습니다 사용자의 세션 이를 작동 시키려면 위의 동일한 샘플을 사용하여 ViewStateSession으로 바꾸십시오.

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 
+0

이 메서드는 뷰 상태를 사용합니다. –

+0

@Oliver Hanapp1 - 예, 뷰 상태를 사용하고 있지만 내 응답은 그렇지만 뷰 상태를 사용하는 것은 아닙니다. 누군가 내게 Viewstate를 사용하고 있다고 말하면 Viewstate.Add()를 사용하고 있음을 의미합니다. 기술적으로 당신 말이 맞습니다. – David

+0

그래, 그것은 간접적으로 암시 적 사용법이 아닌 viewstate를 사용하고 있습니다. –

2

int count=0; 

count++; 

ViewState["count"] = Convert.ToInt32(ViewState["count"]) + count; 

Label1.Text = ViewState["count"].ToString(); 
0

당신이보기 수를 사용할 수있는 버튼을 클릭 이벤트에서이 코드를 넣어 button_click ..

ViewState["count"] = Convert.ToInt32(ViewState["count"])+1; 
Label2.Text = "This button has been clicked " + ViewState["count"].ToString() + " times"; 
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()); 

    } 
관련 문제