【发布时间】:2016-11-09 10:24:57
【问题描述】:
背景:
我的网页中有一个位置,用户可以在其中提交 ID 号。他们可以将 ID 输入到文本框中,也可以从下拉列表中选择一个经常使用的 ID。由于这两个输入源本质上做同样的事情,所以我对它们都使用相同的回调函数。此函数中有检查以查看发件人是文本框还是下拉列表(以及适当的验证检查)。
问题:
我从这个函数中得到了一些非常奇怪的行为。当调用此函数并且发送者是下拉列表时,一切都按预期进行。但是,当调用此函数并且发送者是文本框时,一切似乎都很好,直到退出该函数。一旦函数退出,控制立即跳转到另一个我没有在该函数内任何地方调用过的不相关函数。当我测试它和在调试器中时,它会在 Web 上实现这种跳转。它总是跳转到同一个函数。此函数本身是页面上其他位置的按钮的回调函数(仅在用户显式按下按钮时调用)。
我不知道它为什么会这样做,也无法弄清楚出了什么问题。
相关代码
注意:文本框和下拉列表都在 GridView 的 EditItemTemplate 中,如果这很重要的话。
<asp:TextBox ID="TextBoxCQ" runat="server" BackColor="#ffcccc" Text="Enter CQ here" onclick="$(this).val('');" OnTextChanged="cq_Selected_In_Edit"></asp:TextBox>
<asp:DropDownList ID="AssociatedCQList" runat="server" BackColor="#ffcccc" AppendDataBoundItems="True" Font-Size="Smaller" AutoPostBack="True" DataSourceID="SqlDataSource_CQList" DataTextField="cqdetail" DataValueField="cqID" OnSelectedIndexChanged="cq_Selected_In_Edit">
<asp:ListItem Selected="True" Enabled="true" Value="Select from list of CQ's">Select from list of CQ's </asp:ListItem>
</asp:DropDownList>
代码背后:
protected void cq_Selected_In_Edit(object sender, EventArgs e)
{
object type = sender.GetType();
string name = ((System.Reflection.MemberInfo)(type)).Name;
bool isTextbox = (name == "TextBox"); // to be used throughout the function
GridViewRow Row;
string text;
if (isTextbox) // it's the textbox calling
{
Row = (GridViewRow)((System.Web.UI.WebControls.TextBox)(sender)).NamingContainer;
text = ((System.Web.UI.WebControls.TextBox)(sender)).Text;
}
else // it's the dropdown calling
{
Row = (GridViewRow)((System.Web.UI.WebControls.DropDownList)(sender)).NamingContainer;
text = ((System.Web.UI.WebControls.ListControl)(sender)).Text;
}
// do more processing, etc etc
}
【问题讨论】:
-
如果没有看到相关代码,我们无法为您提供帮助,请编辑问题。
-
页面上有多少个按钮,文本框回调是如何触发的?
-
来自How To: Respond to Changes in a TextBox Web Server Control - "默认情况下,TextChanged 事件不会立即导致 Web 表单页面被发布到服务器。相反,该事件会在下次表单发布时在服务器代码中引发已发布。" 通过观察,您的代码没有在文本框控件上使用
AutoPostback,这意味着 其他东西 导致表单被发布。我的假设是(无论您是否打算这样做)该按钮被调用。 -
@Damien_The_Unbeliever 在网格中,有 4 列的链接按钮,每页有 20 行。所以页面上有 80 个链接按钮,但那里只有 4 个不同的功能。然后页面上有一个“重置”页面的按钮(因为链接按钮通过各种事物过滤条目),这就是神秘的调用。
-
链接按钮在 HTML 中呈现为锚标记。您有一个只有一个 (HTML) 按钮的表单,因此如果您在填写文本框后按 Enter 键,则该表单将自动提交,并按下唯一可能的按钮。