【问题标题】:All control are fired in asp.net所有控件都在 asp.net 中触发
【发布时间】:2016-12-13 20:49:11
【问题描述】:

由于我是 ASP .NET 的新手,我想知道这是正常行为还是奇怪的事情。我正在尝试将 C# WinForms 应用程序转换为 Web 应用程序,但它的行为与我预期的不同。

在桌面应用程序中,用户在文本框上按 Enter 后,我会获取数据。数据已加载,我可以对其进行修改,然后,当我完成数据更改后,我可以按两个按钮之一,并将数据保存到数据库或清除表单。像这样的。

    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 中相同的行为,例如用户输入 - 输入 - 加载数据 - 修改 - 需要时按下按钮。谢谢你。

//视图状态是我要找的东西吗?

【问题讨论】:

  • 查看 ispostback。另外,请包含不起作用的示例代码。
  • 这是一个关于 ASP.Net 页面生命周期的有用的 MSDN 页面。 msdn.microsoft.com/en-us/library/ms178472.aspx 正如@Trey 所说,使用if(!Page.isPostBack) 回发不应执行的周围代码可能会有所帮助,但我不确定问题到底出在哪里。
  • 您不能在 ASP.NET 中使用 MessageBox 类。这是特定于 Windows 窗体的。
  • 分享你的代码
  • 也感谢您的回复。我确实必须阅读更多关于此的内容。我会的。

标签: c# asp.net button


【解决方案1】:

这是一个帮助您入门的 sn-p。请记住,在按 Enter 时发布 HTML 表单是网站的默认行为。所以第一件事是通过用Panel 包装TextBox 和提交按钮并分配给它的DefaultButton 来防止这种情况发生。现在,当在TextBox1 中按下回车时,它会将表单发布为dummyButton

接下来我们将OnTextChanged 事件添加到TextBox1 并将AutoPostBack 设置为true。当TextBox1 的焦点丢失时,这将触发。您可以删除它,只需将输入与 dummyButton 一起使用。

添加了dummyButton 以确保当在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>

然后在代码后面。

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 = "";
}

你也可以像这样通过回车来阻止 PostBack。 JavaScript 将阻止所有输入。例如,根据您的页面设计,您可以在 &lt;body&gt; 标记中进行设置。

<div onkeydown="return (event.keyCode!=13);">
    <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="true" OnTextChanged="TextBox1_TextChanged"></asp:TextBox>
</div>

【讨论】:

  • 非常感谢。它解决了我的问题。对我来说似乎有很多东西要学习:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-22
  • 2014-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-31
相关资源
最近更新 更多