0

我在 ASP.NET 中有一个表单,如果用户存在数据,它会加载数据,然后允许他们更新。所以在Page_Load我有:

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!CheckAndAddRecord(_currentUser.UserID))
        {
            CreateEntryPoint(_currentUser.UserID);
        } 
        else
        {
            DataView dv = LoadApplicationData(_currentUser.UserID);
            foreach (DataRowView rowView in dv)
            {
                DataRow row = rowView.Row;

                _applicationId = row["id"].ToString();

                txtProjectNumber.Text = row["ProjectNumber"].ToString();
                  if (String.IsNullOrEmpty(chkSignedNDANo.ToString()) ||  String.IsNullOrEmpty(chkSignedNDAYes.ToString()))
                  {
                     chkSignedNDANo.Checked = Convert.ToBoolean(row["SignedNDAOnFile"]);
                     chkSignedNDAYes.Checked = Convert.ToBoolean(row["SignedNDAOnFile"]);
                  }
                  txtDateWritten.Text = row["DateWritten"].ToString();
            }
        }
    }

它调用这个方法:

    public bool CheckAndAddRecord(int UserId)
    {
        string connStr = ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString;
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand cmd = new SqlCommand("CheckUserInTemp", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.Add(new SqlParameter("@SubmittedBy", UserId));
        SqlDataAdapter dap = new System.Data.SqlClient.SqlDataAdapter(cmd);
        DataSet ds = new DataSet();

        // open conn
        if (conn.State == ConnectionState.Closed)
            conn.Open();

        // fill
        dap.Fill(ds);

        // close the conn
        if (conn.State == ConnectionState.Open)
            conn.Close();

        bool boolRecordExist = false;

        if (ds.Tables[0].DefaultView.Count == 0)
        {
            boolRecordExist = false;
        } 
        else
        {
            boolRecordExist = true;
        }

        return boolRecordExist;
    }

这似乎可以正常工作并正确填充字段。但后来更新我调用了一个按钮点击,它调用了这个方法:

    public void UpdateRecordInTemp(int appId, string projectNumber)
    {
        string connStr = ConfigurationManager.ConnectionStrings["SiteSqlServer"].ConnectionString;
        SqlConnection conn = new SqlConnection(connStr);
        SqlCommand cmd = new SqlCommand("CPC_ProposalUpdateTemp", conn);
        cmd.CommandType = CommandType.StoredProcedure;
        cmd.Parameters.AddWithValue("@id", appId);
        cmd.Parameters.AddWithValue("@ProjectNumber", txtProjectNumber.Text);

        try
        {
            conn.Open();
            cmd.ExecuteNonQuery();
        }
        catch (Exception ex)
        {
            throw new Exception("Exception adding coupon. " + ex.Message);
        }
        finally
        {
            conn.Close();
        }
    }

问题是传递的字段总是包含旧值。因此,如果进入页面时的值为“123”,我将其更改为“abc”并单击按钮,则传递“123”而不是“abc”。

抱歉发了这么长的帖子,我想了解所有细节。我对此感到困惑。谢谢!

4

1 回答 1

0

在页面加载检查IsPostBack属性if。您的代码似乎在每次页面加载时都在执行。

if(!IsPostBack)
{
       // Do your work
}

更新

UpdateRecordInTemp(int appId, string projectNumber)在您没有使用的代码方法中,projectNumber您正在使用txtProjectNumber.Text

于 2012-05-17T20:26:58.170 回答