문제

버튼을 누를 때 ViewState 변수를 설정하려고 하는데 버튼을 두 번째로 클릭할 때만 작동합니다.코드 숨김은 다음과 같습니다.

protected void Page_Load(object sender, EventArgs e)
{
    if (Page.IsPostBack)
    {
        lblInfo.InnerText = String.Format("Hello {0} at {1}!", YourName, DateTime.Now.ToLongTimeString());
    }
}

private string YourName
{
    get { return (string)ViewState["YourName"]; }
    set { ViewState["YourName"] = value; }
}


protected void btnSubmit_Click(object sender, EventArgs e)
{
    YourName = txtName.Text;

}

내가 놓친 것이 있습니까?다음은 디자인 파일의 형식 부분입니다. POC:

<form id="form1" runat="server">
<div>
Enter your name: <asp:TextBox runat="server" ID="txtName"></asp:TextBox>
<asp:Button runat="server" ID="btnSubmit" Text="OK" onclick="btnSubmit_Click" />
<hr />
<label id="lblInfo" runat="server"></label>
</div>
</form>

추신: 샘플은 매우 단순화되었습니다. "사용 txtName.Text 대신 ViewState"는 정답이 아닙니다. ViewState에 있으려면 정보가 필요합니다.

도움이 되었습니까?

해결책

Page_Load 전에 화재 btnSubmit_Click.

포스트백 이벤트가 발생한 후에 뭔가를 하고 싶다면 다음을 사용하세요. Page_PreRender.

//this will work because YourName has now been set by the click event
protected void Page_PreRender(object sender, EventArgs e)
{
    if (Page.IsPostBack)
        lblInfo.InnerText = String.Format("Hello {0} at {1}!", YourName, DateTime.Now.ToLongTimeString());
}

기본 순서는 다음과 같습니다.

  • 페이지 초기화 실행(초기화가 ViewState에 액세스할 수 없음)
  • ViewState를 읽었습니다.
  • 페이지 로드 발생
  • 모든 이벤트 발생
  • PreRender 실행
  • 페이지 렌더링
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top