【问题标题】:How pass a values from a web form to another in ASP.NET?如何在 ASP.NET 中将值从 Web 表单传递到另一个?
【发布时间】:2020-09-19 00:36:16
【问题描述】:

我正在尝试将字符串数据从一个 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。

【问题讨论】:

  • 哎呀。更新命令看起来很可怕,容易受到 sql 注入问题的影响。

标签: c# asp.net postgresql visual-studio webforms


【解决方案1】:

这里有两点需要理解:

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

因此,如果您想要跨 HTTP 请求使用一个值,例如在这种情况下,当您有两种不同的表单时,您必须将其放置在稍后处理 http 请求时可用的位置。您可以通过以下几种方式做到这一点:会话、GET (url) 或 POST 参数,或者在第一次请求期间保存到数据库并在第二次请求时接收。

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


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

【讨论】:

  • 感谢您的建议,我使用 Session 并更改了检索数据的方式,我在另一个 Web 表单上放置了一个按钮来获取数据,而不是在一个页面之间更改后自动放置信息给另一个。无论如何,我认为告诉某人他们应该或不应该写什么超出了成为一名优秀的开发人员的范围,我知道我正在编写的代码远不能接受,但我必须以某种方式学习。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 2013-03-03
  • 1970-01-01
  • 2016-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多