0

私が尋ねる理由は、ユーザーがクリックしたものに応じて表示/非表示にするテキストボックスやラベルなどで満たされた更新パネルがあるためです。後で、ループを実行してすべてのテキストボックスをクリアします。以前は問題なく機能していましたが、AJAX Update Panelを追加したので、「無効なポストバックまたはコールバック引数」エラーが発生します。

これはそのAJAXアップデートパネルのせいですか?それとも私は自分で完全に間違ったことをしていますか?

ありがとう、エリー

[編集]:わかりました。コードがどこから来ているのかわからないため、大量のコードを追加しています。

これは、レコードを書き込む方法です。

protected void AddEmployerRecord()
    {
        connection = new SqlConnection();
        connection.ConnectionString = "****";
        connection.Open();

        newEmployer = new EmployerCRUD(connection);

        employerRow.employerName = tb_employer.Text;
        employerRow.empPhone = tb_phone.Text;
        employerRow.empFax = tb_fax.Text;
        employerRow.empEmail = tb_email.Text;
        employerRow.empAddress = tb_address.Text;
        employerRow.empCity = tb_city.Text;
        employerRow.empState = ddl_state.SelectedValue.ToString();
        employerRow.empZIP = tb_ZIP.Text;
        employerRow.startDate = Convert.ToDateTime(tb_fromDate.Text);
        employerRow.endDate = Convert.ToDateTime(tb_toDate.Text);
        employerRow.startPay = Convert.ToDecimal(tb_startPay.Text);
        employerRow.endPay = Convert.ToDecimal(tb_endPay.Text);
        employerRow.leaveReason = tb_leaveReason.Text;
        employerRow.supervisorFName = tb_superFName.Text;
        employerRow.supervisorLName = tb_superLName.Text;
        employerRow.contactForRef = rbl_contact.SelectedValue.ToString();
        employerRow.jobDesc = tb_jobDesc.Text;
        employerRow.applicantID = 10010;
        //employerRow.applicantID = Convert.ToInt32(Session["ApplicantNum"]);
        employerRow.supervisorTitle = tb_superTitle.Text;
        employerRow.jobTitle = tb_jobTitle.Text;
        employerRow.startPayType = ddl_startPayType.SelectedValue.ToString();
        employerRow.endPayType = ddl_endPayType.SelectedValue.ToString();

        ct_emp = newEmployer.Add(employerRow);
        // *************** Error Message *************** //
        //if (ct_emp.Message != "OK")
        //    Error message
        //else
        //    

        connection.Close();
    }

そして、これはグリッドをロードする方法です。

protected void LoadGrid()
    {
        try
        {
            SqlConnection pConnection = new SqlConnection();
            pConnection.ConnectionString = "**";
            pConnection.Open();
            string sqlstatement = "SELECT EmployerID, EmployerName FROM dbo.EMPLOYER WHERE ApplicantID = @applicantID";
            command = new SqlCommand(sqlstatement, pConnection);
            command.Parameters.AddWithValue("@applicantID", 10010);
            //command.Parameters.AddWithValue("@applicantID", Session["ApplicantNum"].ToString().Trim());
            ds = new DataSet();
            adapter = new SqlDataAdapter(command);
            builder = new SqlCommandBuilder(adapter);
            adapter.Fill(ds);
            gv_employers.DataSource = ds.Tables[0];
            gv_employers.DataBind();
            pConnection.Close();
        }
        catch (Exception error)
        {
            Response.Write(error.Message);
        }
    }

補足として、私がデバッグしている間、ApplicantIDはわずか10010です(一貫性が必要です)。

また、データをグリッドに再バインドしようとすると、この問題が発生することをどこかで読みました。ページがリロードされるたびに、そのLoadGrid()メソッドを実行します。データを別の場所にバインドする必要がありますか?もしそうなら、どのように?

4

2 に答える 2

0

すべてのテキストボックスをクリアする簡単な方法が必要な場合は、次のようなものを使用してください

    public  void ClearTextItems(ControlCollection controls)
    {
        foreach (Control c in controls)
        {
            if (c is System.Web.UI.WebControls.TextBox)
            {
                TextBox t = c as TextBox;
                t.Text = string.Empty;
            }
        }
     }

PostBackエラーが発生している他のコードを確認する必要があります...

于 2012-08-01T19:02:56.550 に答える
0

UpdatePanelを追加するだけでは、そのエラーは発生しません。

UpdatePanelsはページの一部をエンベロープし、その部分を部分的に更新します。

コントロールコレクションを更新していますか?一部のユーザー入力に応じて、コントロールまたはユーザーコントロールを動的に追加しますか?

コントロールのViewStateまたはコントロールコレクションへの追加を確認します。

于 2012-08-01T19:03:44.527 に答える