所有控件都在asp.net中触发

时间:2016-12-13 20:49:12

标签: c# asp.net button

因为我是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相同的行为,例如:用户输入 - 输入 - 加载数据 - 修改 - 按我想要的按钮。谢谢。

//我正在寻找视图状态吗?

1 个答案:

答案 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>