簡體   English   中英

如何在 ASP.NET 中將值從 Web 表單傳遞給另一個?

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

我試圖將字符串數據從一個 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. 表單類實例不會在請求之間持續存在 您的代碼運行足夠長的時間來向瀏覽器發送一些 html 或 javascript,然后所有內容都會立即被丟棄; 沒有什么會留在記憶中。 即使同一個用戶再次請求同一個頁面(即,在他們的瀏覽器中點擊刷新),您仍然會得到一個全新的頁面類實例,它對之前發生的事情一無所知。

因此,如果您有一個值要在 HTTP 請求中使用,就像在這種情況下,當您有兩種不同的表單時,您必須將它放在某個地方,以便在處理稍后的 http 請求時可用。 您可以通過多種方式做到這一點:會話、GET (url) 或 POST 參數,或者在第一個請求期間保存到數據庫並在第二個請求中接收。

在這種情況下,會話值似乎最合適,但如果不了解更多您在做什么,就很難確定。


看在上帝的份上,修復那個明顯的 SQL 注入問題。 您不應該在不知道這一點的情況下為 Web 編寫數據庫代碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM