因为我是ASP .NET的新手,我想知道这是正常行为还是奇怪的行为。我正在尝试将C#WinForms应用程序转换为Web应用程序,它的行为并不像我预期的那样。
在桌面应用中,我在用户按下文本框后输入数据。数据加载我可以修改它然后,当我完成更改数据后,我可以按两个按钮之一,数据保存到数据库或表单被清除。这样的事情。
private int idOrder;
protected void TextBox1_TextChanged(object sender, EventArgs e)
{
if(load_data)
{
label1.Text = "some loaded data";
...
else{ MessageBox.Show("Something went wrong. No data loaded");
}
}
protected void Button2_Click(object sender, EventArgs e)
{
//save to database;
}
但是当我尝试在ASP.NET Web表单中执行相同的操作时,每当我按下文本框上的Enter键时,所有控件都会在页面刷新时触发(因为它在源代码行中写入)。能否请您建议我应该怎样做才能复制与winforms相同的行为,例如:用户输入 - 输入 - 加载数据 - 修改 - 按我想要的按钮。谢谢。
//我正在寻找视图状态吗?
答案 0 :(得分:0)
这是一个可以帮助您入门的代码段。请记住,按Enter键时发布HTML表单是网站的默认行为。因此,第一件事就是通过将带有Panel
的{{1}}包装到TextBox和Submit Button来阻止它。现在,当在DefaultButton
中按下输入时,它会将表单发布为TextBox1
接下来,我们向dummyButton
添加OnTextChanged
个事件,并将TextBox1
设置为AutoPostBack
。当true
的焦点丢失时,这将触发。您可以将其删除,只需使用TextBox1
输入。
添加dummyButton
以确保在dummyButton
中按下输入时表单将为PostBack以获得所需的行为。
TextBox1
然后在代码背后。
<asp:Panel ID="Panel1" runat="server" DefaultButton="Button1">
<asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" OnTextChanged="TextBox1_TextChanged"></asp:TextBox>
<br />
<br />
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<br />
<br />
<asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click" />
<asp:LinkButton ID="dummyButton" runat="server" OnClick="TextBox1_TextChanged"></asp:LinkButton>
</asp:Panel>
你也可以使用这样输入来阻止PostBack。 JavaScript将阻止所有进入。根据您的页面设计,您可以在protected void TextBox1_TextChanged(object sender, EventArgs e)
{
//load from database
Label1.Text = TextBox1.Text;
}
protected void Button1_Click(object sender, EventArgs e)
{
//save to database
Label1.Text = "Data saved!";
TextBox1.Text = "";
}
标记中进行设置,例如。
<body>