C# 在asp.net中禁用从按钮回发

C# 在asp.net中禁用从按钮回发,c#,asp.net,postback,C#,Asp.net,Postback,你好,我有一个学校任务,要制作一个名为“绞刑人”的游戏, 我开始制作这个游戏,但有一个大问题我无法解决 每次我点击按钮。所有元素都会从页面中消失。 我知道原因,那是因为回邮 但是,如果我从按钮禁用回发,则不会发生任何事情 你知道我怎么去吗? 如何单击按钮并执行某些事件而不创建回发 这是密码 abc ltr; Words word = null; static Label [] lbl = null; static Button[] btn = null; protected void P

你好,我有一个学校任务,要制作一个名为“绞刑人”的游戏, 我开始制作这个游戏,但有一个大问题我无法解决

每次我点击按钮。所有元素都会从页面中消失。 我知道原因,那是因为回邮

但是,如果我从按钮禁用回发,则不会发生任何事情

你知道我怎么去吗? 如何单击按钮并执行某些事件而不创建回发

这是密码

abc ltr;

Words word = null;

static Label [] lbl = null;

static Button[] btn = null;

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    {
        SetBord();
        SetWords();
    }

}

private void SetWords()
{
    word = new Words();
    Random ids = new Random();
    string temp_word;
    int id = ids.Next(0, word.GetListSize());
    temp_word = word.GetWords(id);

    lbl = new Label[word.GetWordLenght(id)];

    for (int i = 0; i < word.GetWordLenght(id); i++)
    {
        lbl[i] = new Label();
        lbl[i].ID ="lbl"+i;
        lbl[i].CssClass = "LetterStyle";
        lbl[i].Text = Convert.ToString(word.get_chars(id,i));
        this.Words_Panel.Controls.Add(lbl[i]);
    }


}
private void SetBord()
{
    ltr = new abc();

    btn = new Button[27];
    for (int i = 0; i<27; i++)
    {
      btn[i] = new Button();  
      btn[i].ID = "btn" + i;
      btn[i].Attributes.Add("runat", "server");
      btn[i].Click += new EventHandler(LetterClicked);
      btn[i].Width = new Unit("100px");
      btn[i].Height = new Unit("49px");
      btn[i].Text = "" + ltr.getLetters(i); 
      this.Letters.Controls.Add(btn[i]);
    }


}

protected void LetterClicked(object sender, EventArgs e)
{
    Button letter = (Button)sender;
    letter.Enabled = false;
    lbl[0].Text = letter.Text;
}   
abc-ltr;
单词word=null;
静态标签[]lbl=null;
静态按钮[]btn=null;
受保护的无效页面加载(对象发送方、事件参数e)
{
如果(!Page.IsPostBack)
{
挫折();
SetWords();
}
}
私有void SetWords()
{
单词=生词();
随机ID=新随机();
字符串临时字;
int id=ids.Next(0,word.GetListSize());
temp_word=word.GetWords(id);
lbl=新标签[word.GetWordLength(id)];
for(int i=0;i
protected void Page_Init(object sender, EventArgs e)
{

        SetBord();
        SetWords();
}

如果没有回发,你就无法让你的游戏正常运行,或者你必须用javascript完成所有事情(但我认为这不是制作这个游戏的目的)

由于您是动态创建控件的,因此每次回发时都需要重新创建控件(只需删除Page_Load函数中的条件)


此外,您还应该将游戏数据从一次回发保存到另一次回发

当您创建动态控件时,遇到的是一种现象。由于您在代码中动态创建按钮和标签,因此当您重新加载页面时,这些控件不会被“保存”(记住)(每次重新加载/发回页面时,它们都会丢失)

如果除了动态生成它们之外,没有其他方法来解决这个问题;那么您必须像每个人处理动态控件创建一样来处理这个问题

以下是一些要点:

  • 创建控件时,需要“记住”所创建的控件(viewstate?会话?)
  • 当页面重新加载/刷新时,在page_Load事件中,您需要重新创建所有这些控件,然后才能处理它们。如果您希望随后处理这些控件中的事件/值,则尤其如此。如果不重新创建这些控件,则IIS将不会“持久化”您在这些控件上设置的任何值(因为IIS找不到控件,所以提交的值将被丢弃)
您需要为上述内容构建您的设计/程序。祝您好运