Avatar billede pelkjaer Nybegynder
14. november 2003 - 09:52 Der er 18 kommentarer og
1 løsning

Textbox.Text

Jeg er ikke lige klar over hvad jeg gør forkert, men jeg kan sq' ikke fange textbox.text...

Jeg får flg. fejl:

System.NullReferenceException: Object reference not set to an instance of an object

når jeg kører flg:

"UPDATE mailconfig SET mailServer = '"+tbMailServer.Text+"', emailAddress = '"+tbEmail.Text+"', messageWelcome = '"+tbWelcomeMsg.Text+"' WHERE id = '"+ strID +"'";

Ja, jeg kan ikke engang skrive textbox.text ud i Page_Load uden at den fejl kommer.

Ja det er sikkert ganske simpelt, men jeg plejer at poste/requeste, så denne her metode har jeg ikke prøvet før :o))
Avatar billede repsak Nybegynder
14. november 2003 - 09:56 #1
noget tyder på at navnet i aspx-filen og navnet i codebehind (altså navnet på textboxen) ikke er 100% ens
Avatar billede pelkjaer Nybegynder
14. november 2003 - 09:58 #2
jamen det er de skam :)
Avatar billede pelkjaer Nybegynder
14. november 2003 - 09:58 #3
Hele min funktion:

    // Updates Textboxes
    protected void tb_Update(object sender, System.EventArgs e) {
      // Set command and conn
      CoreLab.MySql.MySqlConnection Conn = OpenMySqlConnection();

      // Set SQL Query
      string strID = Request.QueryString["id"];
      SqlString = "UPDATE mailconfig SET mailServer = '"+tbMailServer.Text+"', emailAddress = '"+tbEmail.Text+"', messageWelcome = '"+tbWelcomeMsg.Text+"' WHERE id = '"+ strID +"'";
      Response.Write(SqlString);

      // Create Command object
      MySqlCommand objCommand = new MySqlCommand(SqlString, Conn);

      //Execute command
      Conn.Open();
      objCommand.ExecuteNonQuery();
      Conn.Close();

      // Rebind
      dp_Bind();
    }
Avatar billede pelkjaer Nybegynder
14. november 2003 - 10:00 #4
Mine textboxes hvis det skulle hjælpe

    <tr>
    <td>Mail Server: <asp:textbox id="tbMailServer" Text='<%#DataBinder.Eval ( Container, "DataItem.mailServer" )%>' runat="server"></asp:TextBox></td>
    </tr>
    <tr>
    <td>Email: <asp:textbox id="tbEmail" Text='<%#DataBinder.Eval ( Container, "DataItem.emailAddress" )%>' runat="server"></asp:TextBox></td>
    </tr>
    <tr>
    <td>Velkomst mail: <asp:textbox id="tbWelcomeMsg" Text='<%#DataBinder.Eval ( Container, "DataItem.messageWelcome" )%>' runat="server" TextMode="MultiLine"></asp:TextBox></td>
    </tr>
Avatar billede clausjul Nybegynder
14. november 2003 - 10:03 #5
Prøv denne:

SqlString = "UPDATE mailconfig SET mailServer = '"+((TextBox)FindControl("tbMailServer")).Text+"', emailAddress = '"+((TextBox)FindControl("tbEmail")).Text+"', messageWelcome = '"+((TextBox)FindControl("tbWelcomeMsg")).Text+"' WHERE id = '"+ strID +"'";

Lav en Response.Write(SqlString) og se om SQL'en er korrekt eller smide den ind hher
Avatar billede pelkjaer Nybegynder
14. november 2003 - 10:07 #6
Jeg prøver den lige, men jeg kan ikke engang køre sql ud i en response.write - selv med en try / catch får jeg fejlsiden.
Avatar billede clausjul Nybegynder
14. november 2003 - 10:08 #7
Er du sikker på at der er en Request.QueryString["id"] ? Kan du se id i urlen?
Avatar billede pelkjaer Nybegynder
14. november 2003 - 10:10 #8
Jeps - når jeg kører denne:

SqlString = "UPDATE mailconfig SET mailServer = 'test1', emailAddress = 'test2', messageWelcome = 'test3' WHERE id = '"+ strID +"'";

virker det

Din SqlString får jeg også fejl på, og kan ej heller udskrive strengen.
Avatar billede pelkjaer Nybegynder
14. november 2003 - 10:12 #9
Og kører jeg denne:
Response.Write(((TextBox)FindControl("tbMailServer")).Text);
I Page_Load får jeg samme fejl - jeg er helt rundt på gulvet :o))
Avatar billede clausjul Nybegynder
14. november 2003 - 10:13 #10
Bare en tanke - prøv at ændre <asp:textbox til <asp:TextBox ...
Avatar billede clausjul Nybegynder
14. november 2003 - 10:14 #11
Har <form> en runat="server" ?
Avatar billede pelkjaer Nybegynder
14. november 2003 - 10:14 #12
Jeg skal da prøve, men de er trukket ind med VS.NET så mon :)
Avatar billede clausjul Nybegynder
14. november 2003 - 10:15 #13
Det burde virke - så det er ikke det...

Smid lige hele koden ind....
Avatar billede pelkjaer Nybegynder
14. november 2003 - 10:16 #14
Hele webformen:

<%@ Page language="c#" Codebehind="maillist_config.aspx.cs" AutoEventWireup="false" Inherits="emotor.builder.maillist.maillist_config" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
  <HEAD>
<title></title>
</HEAD>
<body>
<form id="maillist_config" method="post" runat="server">
<asp:DropDownList id="dropID" runat="server"></asp:DropDownList>
<asp:ImageButton id="btnNavigate" runat="server" OnClick="dp_Click"></asp:ImageButton>
<br><br>
<asp:DataList id="dl" runat="server">
  <ItemTemplate>
    <table border="0" cellpadding="3" cellspacing="0">
    <tr>
    <td>Mail Server: <asp:textbox id="tbMailServer" Text='<%#DataBinder.Eval ( Container, "DataItem.mailServer" )%>' runat="server"></asp:TextBox></td>
    </tr>
    <tr>
    <td>Email: <asp:textbox id="tbEmail" Text='<%#DataBinder.Eval ( Container, "DataItem.emailAddress" )%>' runat="server"></asp:TextBox></td>
    </tr>
    <tr>
    <td>Velkomst mail: <asp:textbox id="tbWelcomeMsg" Text='<%#DataBinder.Eval ( Container, "DataItem.messageWelcome" )%>' runat="server" TextMode="MultiLine"></asp:TextBox></td>
    </tr>
    <tr>
    <td><asp:imagebutton id="btnUpdate" runat="server" EnableViewState="False"></asp:ImageButton><br>
        <asp:LinkButton id=LinkButton1 runat="server" OnClick="tb_Update">LinkButton</asp:LinkButton></td>
    </tr>
    </table>
  </ItemTemplate>
</asp:DataList>
</form>
</body>
</HTML>

hele codebehind

using System;
using System.Collections;
using System.ComponentModel;
using System.Configuration;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using CoreLab.MySql;

// Class maillist_config in emotor.builder.maillist
namespace emotor.builder.maillist {

    public class maillist_config : System.Web.UI.Page {

    // Web Controls used
    protected System.Web.UI.WebControls.TextBox tbEmail;
    protected System.Web.UI.WebControls.TextBox tbWelcomeMsg;
    protected System.Web.UI.WebControls.TextBox tbMailServer;
    protected System.Web.UI.WebControls.ImageButton btnUpdate;
    protected System.Web.UI.WebControls.DataList dl;
    protected System.Web.UI.WebControls.DropDownList dropID;
    protected System.Web.UI.WebControls.ImageButton btnNavigate;

    // SQL Query
    public string SqlString;
    // MySql Path
    public string ConnectionString = ConfigurationSettings.AppSettings["MySqlSource"].ToString();
 
    // Page Load
        private void Page_Load(object sender, System.EventArgs e) {
      if (!(IsPostBack)) {
        // Run Functions
        dp_Bind();
        tb_Bind();
      }
        }

    // General MySql Connection
    public CoreLab.MySql.MySqlConnection OpenMySqlConnection () {
      CoreLab.MySql.MySqlConnection Conn = new CoreLab.MySql.MySqlConnection();
      Conn.ConnectionString = ConnectionString;
      return Conn;
    }

    // Bind textboxes
    protected void tb_Bind() {
      // Set SQL SELECT Query
      string strID = Request.QueryString["id"];
      SqlString = "SELECT * FROM mailconfig WHERE id = '"+ strID +"'";

      // Create and fill DataAdapter object
      CoreLab.MySql.MySqlConnection Conn = OpenMySqlConnection();
      Conn.Open();
      CoreLab.MySql.MySqlDataAdapter objDataAdapter = new CoreLab.MySql.MySqlDataAdapter(SqlString,Conn);
      Conn.Close();

      // Fill DataSet from DataAdapter
      DataSet ds = new DataSet();
      objDataAdapter.Fill(ds);

      // Bind DataSet to DataList
      dl.DataSource = ds;
      dl.DataBind();
    }

    // Bind DropDownList
    protected void dp_Bind() {
      // Set SQL SELECT Query
      SqlString = "SELECT * FROM mailconfig";

      // Create and fill DataAdapter object
      CoreLab.MySql.MySqlConnection Conn = OpenMySqlConnection();
      Conn.Open();
      CoreLab.MySql.MySqlDataAdapter objDataAdapter = new CoreLab.MySql.MySqlDataAdapter(SqlString,Conn);
      Conn.Close();

      // Fill DataSet from DataAdapter
      DataSet ds = new DataSet();
      objDataAdapter.Fill(ds);

      // Bind DataSet to DropDownList
      dropID.DataTextField = "maillistTitle";
      dropID.DataValueField = "id";
      dropID.DataSource = ds;
      dropID.DataBind();
      dropID.Items.Insert(0,"-- Vælg en mailing liste --");
      //dropID.Attributes.Add("onchange", "jumpMenu('this',this)") ;
    }

    // Event based on DropDownList value
    protected void dp_Click(object sender, ImageClickEventArgs e) {
      Response.Redirect("maillist_config.aspx?id=" + dropID.SelectedItem.Value);
    }

    // Updates Textboxes
    protected void tb_Update(object sender, System.EventArgs e) {
      // Set command and conn
      CoreLab.MySql.MySqlConnection Conn = OpenMySqlConnection();

      // Set SQL Query
      string strID = Request.QueryString["id"];
      //SqlString = "UPDATE mailconfig SET mailServer = '"+tbMailServer.Text+"', emailAddress = '"+tbEmail.Text+"', messageWelcome = '"+tbWelcomeMsg.Text+"' WHERE id = '"+ strID +"'";
      SqlString = "UPDATE mailconfig SET mailServer = '"+((TextBox)FindControl("tbMailServer")).Text+"', emailAddress = '"+((TextBox)FindControl("tbEmail")).Text+"', messageWelcome = '"+((TextBox)FindControl("tbWelcomeMsg")).Text+"' WHERE id = '"+ strID +"'";

      Response.Write(SqlString);

      // Create Command object
      MySqlCommand objCommand = new MySqlCommand(SqlString, Conn);

      //Execute command
      Conn.Open();
      objCommand.ExecuteNonQuery();
      Conn.Close();

      // Rebind
      dp_Bind();
    }

        #region Web Form Designer generated code
        override protected void OnInit(EventArgs e) {
            //
            // CODEGEN: This call is required by the ASP.NET Web Form Designer.
            //
            InitializeComponent();
            base.OnInit(e);
        }
       
        /// <summary>
        /// Required method for Designer support - do not modify
        /// the contents of this method with the code editor.
        /// </summary>
        private void InitializeComponent() {   
      this.Load += new System.EventHandler(this.Page_Load);

    }
        #endregion
    }
}
Avatar billede clausjul Nybegynder
14. november 2003 - 10:19 #15
Aha, du laver det jo som en <Asp:DataList> - det må være årsagen.

Du er nødt til at fjerne datalisten og tekstboksenes værdi kan du kalde frem fra Page_Load via en datareader.
Avatar billede pelkjaer Nybegynder
14. november 2003 - 10:22 #16
Okay, det kan da godt være det - jeg prøver det lige en gang.
Avatar billede pelkjaer Nybegynder
14. november 2003 - 10:50 #17
Yup - det hjalp med en DataReader istedet - nu virker update også :)

Thanks.
Avatar billede clausjul Nybegynder
14. november 2003 - 10:51 #18
Ja, når disse ligger i en datalist, så skal værdien kaldes på en anden måde. Men det er jo ikke nøvendigt her, fordi det er tale om en record.
Avatar billede pelkjaer Nybegynder
14. november 2003 - 10:54 #19
ja åbentbart.

Jeg har dog samme problem med opdatering af et datagrid (samme fejl) - men det må jeg kigge på igen efter dette her virker.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester