如何在 ASP.NET 中将值从 Web 表单传递到另一个表单?

How pass a values from a web form to another in ASP.NET?

我试图将字符串数据从一个 Web 表单发送到另一个 Web 表单,但是它抛出了 System.NullReferenceException 错误。我在 Postgress 文档中读到这个错误意味着没有数据可以使用。这是第一种形式的代码:

protected void Button2_Click(object sender, EventArgs e)
{
    editar ed = new editar(tname.Text.ToString());
    //ed.putId(tname.Text.ToString());
    String url = "editar.aspx";
    Response.Redirect(url);
}

创建第二种形式的对象是我发现发送数据的方法之一,但它一直抛出错误。在第二种形式中,您应该会收到它。

public editar(string name)
{
    this.tname.Text = name;
}

基本思路是在第二种形式中接收字符串,将其放入文本框中,然后通过按钮更新数据库的信息。

protected void Button2_Click(object sender, EventArgs e)
{
    upt = new NpgsqlCommand("update usuario set cedula = '" + tcedula.Text.ToString() + "' where nombre = '" + tname.Text.ToString() + "'", conn);
    upt.ExecuteNonQuery();
}

我已经尝试通过 POST 和 Session 方法,这两种方法的问题在于,虽然每次重新加载页面时数据都正确到达,但每次按钮都会重新加载数据,因此更新信息的SQL语句为空,即执行了它,但不更新数据库。我使用 Visual Studio 2019、ASP.NET 和 Postgres。

这里有两点需要理解:

  1. Web 表单仍然对每个页面视图甚至每个服务器事件(如按钮点击)使用 HTTP 请求。
  2. 形成 class 个实例 不在请求之间持久化。您的 代码运行足够长的时间来发送一些 html 或 javascript 到 浏览器,然后 一切立即被丢弃; 什么都没有 留在记忆中。即使同一个用户再次请求同一个页面 (即,在他们的浏览器中点击刷新),你仍然会得到一个全新的 您的页面实例 class 对之前的内容一无所知。

因此,如果您有一个要在 HTTP 请求中使用的值(在本例中,当您有两种不同的形式时),您必须将它放在某个地方,以便在处理稍后的 HTTP 请求时可用。您可以通过多种方式做到这一点:会话、GET (url) 或 POST 参数,或者在第一次请求期间保存到数据库并在第二次请求时接收。

在这种情况下,session 值似乎是最合适的,但如果不了解更多您在做什么,则很难确定。


看在上帝的份上,解决那个明显的 SQL 注入问题。你不应该在不知道的情况下为网络编写数据库代码。