禁用 asp.net 中的“从”按钮回发
本文关键字:按钮 asp net 中的 禁用 | 更新日期: 2023-09-27 17:56:23
Hallo 我有一个学校任务来制作一个名为"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;
}
您遇到的是创建动态控件时遇到的一种现象。由于您在代码中动态创建按钮和标签,因此当您的页面重新加载时,这些控件不会"持久化"(记住)(每次重新加载/回发页面时它们都会丢失)。
如果除了动态生成它们之外没有其他方法可以解决问题;那么你必须像每个人处理动态控件创建一样这样做。
以下是一些提示:
- 创建控件时,需要"记住"创建的控件(视图状态?会话?)。
- 当页面重新加载/刷新时,在 Page_Load 事件中,您需要重新创建所有这些控件,然后才能处理它们。如果要随后处理来自这些控件的事件/值,则尤其如此。如果未重新创建它们,则 IIS 将不会"保留"您为其设置的任何值(因为 IIS 找不到控件,因此将丢弃提交的值)。
您需要为上述内容构建您的设计/程序。祝你好运!
添加Page_Init事件
protected void Page_Init(object sender, EventArgs e)
{
SetBord();
SetWords();
}
如果没有回发,你就无法让你的游戏工作,或者你必须用javascript做所有事情(但我不认为这是制作这个游戏的目的)。
由于控件是动态创建的,因此需要在每次回发时重新创建它们(只需删除Page_Load函数中的条件)
此外,您还应该将游戏数据从一个回发保存到另一个回发