我遇到的最奇怪的问题是...我正在控制菜单编辑页面,并且有一系列控件,一个asp:textbox,带有正在处理的菜单的数字ID,旁边是-和+按钮减少和增加ID。用户可以在文本框中输入新索引,或使用按钮。很轻松,对吧?
这是ASPX标记:
<asp:Button id="menuDown" runat="server" CausesValidation="false" OnClick="DownClick" Text="-" />
Menu # <asp:textbox runat="server" MaxLength="5" Columns="3" id="tbMenuId" />
<asp:Button id="menuUp" runat="server" CausesValidation="false" OnClick="UpClick" Text="+" />
页面下方有一个CompareValidator,可确保输入非负的数字。
在我后面的代码中,我的Page_Load将值毫无问题地拉出了文本框:
Try
menuId = Integer.Parse(tbMenuId.Text)
Catch
menuId = 0
tbMenuId.Text = "0"
End Try
这很好用(一个警告)—每次我通过文本框更改菜单ID时,在Page_Load方法将新值完美地从文本框中拉出之后,将调用DownClick处理程序,以减小所需的ID。 / p>
到目前为止,我设法使所请求的菜单出现的唯一方法是消除两个asp:Button控件。仅消除menuDown按钮将导致调用UpClick处理程序。
我 在asp:Textbox控件上有一个OnTextChanged =“ ...”属性,但是该处理程序从未调用过,而且似乎也没有必要,所以我将其撤消。
我不禁认为这两种行为必须联系在一起。
有人知道为什么会这样吗?
答案 0 :(得分:0)
这被认为是骇人的解决方法,而不是解决方法,但这确实使我继续前进,直到可以解释这种行为为止。
OnTextChanged事件正在按现在的方式触发(不确定我第一次做错了什么),因此,我用它来实现最骇人的黑客行为……
Protected Property hackyFlag As Boolean ' Suppress button click (true) after text change
'...会话变量中的值
Protected Sub tbMenuId_TextChanged(sender As Object, e As EventArgs)
Integer.TryParse(tbMenuId.Text, menuId)
hackyFlag = True
End Sub
Protected Sub DownClick(sender As Object, e As EventArgs)
If hackyFlag Then : hackyFlag = False : Return : End If
If menuId > 0 Then menuId -= 1
tbMenuId.Text = menuId
End Sub
粗暴,骇人听闻,令人作呕...但是可以。 :-)按钮处理程序仍然被错误地调用,但是现在它足够聪明,可以执行我想要的操作,而不是框架告诉它要执行的操作。
对于此页面上为什么发生这种情况而在其他任何情况上没有发生的现象,仍然可以得到更好的答案和/或解释。 (敲木头)