使用C#的非常简单的ASP.NET 3.5应用程序的问题

cc0*_*cc0 1 c# asp.net ajax asp.net-3.5

我的问题是,我似乎只能点击按钮一次,如果我多次点击它就像它已经死了.什么都不做.因此,如果我将文本设置为"Works",则单击它.为什么当我点击多次时它不会在值之间保持交替?

我有以下C#代码(我知道我使用了太多的命名空间,但请忽略它);

using System;
using System.Collections.Generic;
using System.Data;
using System.Web.Security;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
{
    Label1.Text = "Click to test";
}

protected void Click(object sender, EventArgs e)
{

    if (Label1.Text == "Works")
    {
        Label1.Text = "Try again";
    }

    else
    {
        Label1.Text = "Works";
    }
}
}
Run Code Online (Sandbox Code Playgroud)

这是ASPX代码;

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server">
    </asp:ScriptManager>
    <asp:UpdatePanel ID="UpdatePanel1" runat="server">
        <ContentTemplate>
            <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>
    <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Click" /> 

    </form>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

Sop*_*e88 7

在Page_Load中,您需要检查IsPostBack如果它是回发,则不应设置控制值.

protected void Page_Load(object sender, EventArgs e)
{ 
     if (!IsPostBack)
        Label1.Text = "Click to test";
}
Run Code Online (Sandbox Code Playgroud)

或者在ajax更新的情况下,它是IsAutoPostback(我想!)


Gre*_*reg 6

解决方案是Sophie88建议的解决方案,但我想添加一些额外的细节来解释究竟发生了什么.

用户最初请求页面:(IsPostBack为false)

  1. 解析Aspx标记:Label1.Text是"标签"
  2. Page_Load触发,将Label1.Text设置为"Click to test"

用户第一次点击按钮:( IsPostBack为true)

  1. 解析Aspx标记:Label1.Text是"标签"
  2. ViewState已恢复,Label1.Text变为"Click to test"
  3. Page_Load运行,将Label1.Text设置为"Click to test"
  4. 单击方法运行.Label1.Text =="点击测试",所以Label1.Text设置为"Works"

用户第二次点击按钮:( IsPostBack为true)

  1. 解析Aspx标记:Label1.Text是"标签"
  2. ViewState恢复,Label1.Text变为"Works"
  3. Page_Load运行,将Label1.Text设置为"Click to test"
  4. 单击方法运行.Label1.Text =="点击测试",所以Label1.Text设置为"Works"