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

时间:2010-03-02 15:20:05

标签: 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";
    }
}
}

这是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>

4 个答案:

答案 0 :(得分:7)

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

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

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

答案 1 :(得分:6)

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

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

  1. 解析Aspx标记:Label1.Text为“Label”
  2. Page_Load触发,将Label1.Text设置为“Click to test”
  3. 用户第一次点击按钮:(IsPostBack为真)

    1. 解析Aspx标记:Label1.Text为“Label”
    2. ViewState已恢复,Label1.Text变为“Click to test”
    3. Page_Load运行,将Label1.Text设置为“Click to test”
    4. 点击方法运行。 Label1.Text ==“点击测试”,因此Label1.Text设置为“Works”
    5. 第二次用户点击按钮:(IsPostBack为true)

      1. 解析Aspx标记:Label1.Text为“Label”
      2. ViewState已恢复,Label1.Text变为“Works”
      3. Page_Load运行,将Label1.Text设置为“Click to test”
      4. 点击方法运行。 Label1.Text ==“点击测试”,因此Label1.Text设置为“Works”

答案 2 :(得分:2)

为什么要在page_load中设置Label1.Text?

在您的标记中,只需将Text属性设置为“Click to test”

即可
  <asp:Label ID="Label1" runat="server" Text="Click to test"></asp:Label>

答案 3 :(得分:1)

每次加载页面时,您都将Label1.Text设置为“Click to test”(每次显示页面时都会发生Page_Load),然后触发click事件并正确地看到标签未设置为“作品”,因此将其设置为“作品”。

如何修复它,请参阅Sophie88的回答。