2014-10-01 2 views
0

저는 ASP.NET에 익숙하지 만 C 및 C#의 배경 지식이 있습니다. 내 데이터베이스에 연결될 웹 응용 프로그램을 만들려고합니다. 나는 그것을했고 그것은 괜찮습니다. 문제는 데이터베이스를 통해 앞으로 및 뒤로 이동하기위한 버튼을 추가했을 때 발생했습니다 ... 잘 작동했지만 한 번의 클릭만으로 발생했습니다! 그렇다면 아마도 코드에 버그가있을 것이라고 생각했고 쉬운 방법으로 해결하기로 결정했습니다.asp.net 버튼 클릭 이벤트는 한 번만 발생합니다.

하나의 버튼과 하나의 라벨로 새로운 웹 폼을 만들었지 만 첫 번째 클릭 이벤트가 다시 발생하지 않은 후에도 동작은 동일합니다. 어떤 도움이 필요합니까?

내 코드

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace DummyTest 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
    int pom = 0; 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     Label1.Text = Convert.ToString(pom); 
    } 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     pom++; 
     Label1.Text = Convert.ToString(pom); 
    } 
    } 
    } 

및 소스

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1.aspx.cs" 
Inherits="DummyTest.WebForm1" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
<title></title> 
</head> 
<body> 
<form id="form1" runat="server"> 
<div> 

    Dummy Test 
    <br /> 
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" /> 
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
    <br /> 

</div> 
</form> 
</body> 

답변

0

이제 작동 중입니다! 위아래에 대한 코드가 있습니다.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace DummyTest 
{ 
    public partial class WebForm1 : System.Web.UI.Page 
    { 
     static int pom; 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (Page.IsPostBack == false) 
      { 
       pom = 0; 
       Label1.Text = Convert.ToString(pom); 
      } 
     } 

     protected void Button1_Click(object sender, EventArgs e) 
     { 
      var pom = Int32.Parse(Label1.Text); 
      pom++; 
      Label1.Text = Convert.ToString(pom); 
     } 

     protected void Button2_Click(object sender, EventArgs e) 
     { 
      var pom = Int32.Parse(Label1.Text); 
      pom--; 
      Label1.Text = Convert.ToString(pom); 
     } 
    } 
} 
2

귀하의 웹 양식 클래스는 모든 요청에 ​​다시됩니다 - 어떻게 작동하는지 그 단지입니다. 다른 방법으로 필드 pom을 유지해야합니다. 세션 상태에 추가 할 수는 있지만 서버에서 상태를 유지할 때 응용 프로그램의 확장성에 영향을줍니다.

var pom = Int.Parse(Label1.Text); 
pom++; 
Label1.Text = pom.ToString(); 

그러나이 항상 지속 할 무언가의 경우되지 않습니다 : 당신이 당신의 클릭 이벤트 같은 것을 할 수 있도록

그것은 이미 레이블 컨트롤에 의해 유지됩니다. 이 경우에는 html에 숨겨진 필드를 추가합니다. 내 웹폼은 약간 녹슨이지만, 마크 업에 : 제가 위에서했던 것처럼

<asp:HiddenField id="pom" value="0" /> 

다음 클릭 이벤트에 제한 값과 증가를 당깁니다.

+0

답장을 보내 주셔서 감사합니다. 제발, 당신은 "그것을 보유하고있는 HTML에 숨겨진 필드를 추가하기"위해보다 구체적으로 설명 할 수 있습니까? – kimi87

+0

@ kimi87 답변을 – Fordio

1

int pom = 0을 0으로 초기화 할 때마다 값을 설정하여 한 번 호출하는 것으로 보입니다. 하나는 정적 또는 더 나은 시도합니다

protected void Button1_Click(object sender, EventArgs e) 
{ 
    Label1.Text = "" + (Convert.ToInt32(Label1.Text) + 1); 
} 
0

당신은 그렇게 다시 intitialise하지 않는 변수를 0으로 IsPostBack을 값을 나타내는 페이지가되고 있는지 페이지를 다시로드, IsPostBack 검사로 초기화 이동을 시도 할 수 처음으로 렌더링되거나 포스트 백에 대한 응답으로로드되고 버튼 클릭 이벤트가 포스트 백을 트리거합니다. 어느 정도 page lifecycle

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     int pom = 0; 
    } 
    Label1.Text = Convert.ToString(pom); 
} 

의 특정 단계에서

추가
IsPostBack을 화재 IT는 pom 변수의 목적이 무엇인지 따라 달라집니다. 사용자 당 클릭 수를 추적하는 경우 위의 내용이 도움이됩니다. 그러나 모든 사용자의 클릭 수를 추적하는 경우 다른 것을 고려해야합니다 (아마도 global.asax를 사용).

+0

으로 업데이트했습니다. 으로 변경되었습니다. '(Page.IsPostBack == false) { pom = 0; 다른 } { Label1.Text = Convert.ToString (POM); pom ++; } ' 지금이가 작동하지만 난 감소를 구현하는 방법을 모르겠습니다 ... ASP.NET 양식의 – kimi87

+0

실행은 조금 이상한하지만 IsPostBack을 페이지 수명주기에 대한 링크로 볼 수, 그들은해야 무슨 일이 일어나고 있는지, 언제 할지를 알려주세요. –

관련 문제