【问题标题】:disable postback from button in asp.net禁用asp.net中按钮的回发
【发布时间】:2013-01-28 12:01:53
【问题描述】:

你好,我有一个学校任务来制作一个名为“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;
}   

【问题讨论】:

    标签: c# asp.net postback


    【解决方案1】:

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

    如果除了动态生成之外没有其他方法可以解决问题;那么您将不得不像每个人处理动态控件创建的方式一样进行操作。

    这里有一些提示:

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

    您需要针对上述内容构建您的设计/程序。祝你好运!

    【讨论】:

      【解决方案2】:

      添加 Page_Init 事件

      protected void Page_Init(object sender, EventArgs e)
      {
      
              SetBord();
              SetWords();
      }
      

      【讨论】:

        【解决方案3】:

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

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

        您还应该将游戏数据从一个回传保存到另一个

        【讨论】:

          猜你喜欢
          • 2012-05-26
          • 1970-01-01
          • 2012-03-29
          • 2016-07-03
          • 1970-01-01
          • 2011-11-15
          • 2011-02-02
          • 2014-01-06
          • 1970-01-01
          相关资源
          最近更新 更多