繁体   English   中英

从asp.net中的按钮禁用回发

[英]disable postback from button in asp.net

你好,我有一个学校任务要制作一个叫做“ The Hang Men”的游戏,我开始制作这个游戏,但是有一个大问题我无法解决

每次我单击按钮时。 所有元素将从页面中消失。 我知道这样做的原因,是回发的原因。

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

任何想法我怎么去呢? 我如何单击按钮并进行一些活动而不创建回发?

这是代码。

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;
}   

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

如果没有其他方法可以解决问题,而只能动态生成它们; 那么您将必须像每个人如何处理动态控件创建一样去做。

这里有一些提示:

  • 创建控件时,您需要“记住”您创建的控件(viewstate?会话?)。
  • 当页面重新加载/刷新时,在Page_Load事件中,您将需要重新创建所有这些控件,然后才能对其进行处理。 如果您要随后处理那些控件中的事件/值,则尤其如此。 如果不重新创建它们,则您在它们上设置的任何值都不会被IIS“持久化”(因为IIS无法找到控件,因此所提交的值将被丢弃)。

您将需要为上述结构设计设计/程序。 祝好运!

添加Page_Init事件

protected void Page_Init(object sender, EventArgs e)
{

        SetBord();
        SetWords();
}

好吧,如果没有回发,您将无法使您的游戏正常运行,否则您将不得不使用javascript做所有事情(但我认为这并不是制作这款游戏​​的目的)。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM