是否有任何命名约定或限制将按钮命名为“提交”?我有一个下载列表,其中包含autopostback = true和一个按钮。它应该使用数据库中的数据自动生成文本框
<asp:DropDownList ID="d1" runat="server" DataSourceID="SqlDataSource1" DataTextField="scode" DataValueField="scode" OnSelectedIndexChanged="d1_SelectedIndexChanged" AppendDataBoundItems="true" AutoPostBack="true">
<asp:ListItem Selected="True">0</asp:ListItem>
</asp:DropDownList>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\database.mdf;Integrated Security=True" ProviderName="System.Data.SqlClient" SelectCommand="SELECT [scode] FROM [warehouse]"></asp:SqlDataSource>
<asp:TextBox ID="t1" runat="server"></asp:TextBox>
<asp:Button ID="submit" runat="server" Text="Button" />
codebehind:
protected void d1_SelectedIndexChanged(object sender, EventArgs e)
{
Response.Write("hello");
t1.Text = "abcd";
}
我的问题是当我将我的按钮的controlid设置为“提交”时,下拉列表中的回发和事件处理不会被触发但是未决。仅当我单击“提交”按钮时才会触发回发和事件处理。很确定问题在于按钮的控制,因为我花了几个小时的试验和错误来找到解决方法。通过将按钮的controlid重命名为“submit1”,一切都运行良好。简而言之,只要按钮的controlid被命名为submit1“,每当我选择一个项目时,就会使用我的数据自动生成文本框。同时如果按钮的controlid是”submit“,则仅当我点击按钮时才生成数据这是一个小问题,因为我设法找到了解决方法,但我想知道为什么会发生这种情况。
答案 0 :(得分:0)
使用以下minimal代码,我能够在没有母版页的新Web应用程序项目中重现您的问题。
<asp:DropDownList runat="server" OnSelectedIndexChanged="d1_SelectedIndexChanged" AutoPostBack="true">
<asp:ListItem>0</asp:ListItem>
<asp:ListItem>1</asp:ListItem>
</asp:DropDownList>
<asp:TextBox ID="ResultLabel" runat="server" />
<asp:Button ID="submit" runat="server" Text="Button" />
背后的代码
protected void d1_SelectedIndexChanged(object sender, EventArgs e)
{
ResultLabel.Text = "Postback occurred";
}
如果你观看JavaScript控制台,当你更改下拉列表选择时,你会发现它会导致错误。
未捕获的TypeError:theForm.submit不是函数
此错误来自Web窗体插入页面以使回发正常工作的代码。
该错误会阻止回发完成。解决方案是没有任何ID为submit
的控件。您可能会认为这是一个错误,但更改框架以解决此问题会使框架变得比它需要的更复杂。