Postback vs Button_Click

本文关键字:Click Button vs Postback | 更新日期: 2023-09-27 18:34:38

我在按钮单击事件和回发时遇到问题。我有一个页面,其中包含一些文本框和一些下拉列表。我从数据库中填充这些文本框和 ddl。我也有 2 个按钮。其中之一是使用文本框和下拉列表中的更改数据更新数据库。第二个按钮根据其中一个下拉列表中的值显示其他数据。我的问题是,当我单击更新按钮时,数据库会更新,文本框和ddl中的数据会更改,但是当我进入地址选项卡并按Enter时,我得到了旧数据(在数据库中,所有内容都更改为新值(。我可以添加方法

如果(IsPostBack(

数据将始终是最新的,但在这种情况下,我将无法更改显示其他数据的下拉列表中的值(自动回发会将数据加载到此 ddl 中(。有什么解决方法吗?如果我的描述不清楚,请告诉我。

编辑1 添加 C# 代码

public partial class EditStaff : System.Web.UI.Page
{
   Methods methods = new Methods();
   IPrincipal p = HttpContext.Current.User;
protected void Page_Load(object sender, EventArgs e)
{
    string soeid = Convert.ToString(Request["soeid"]);
    DataSet dsUserDetails = new DataSet();
    DataTable dtUserDetails = new DataTable();
    DataSet dsDDLs = new DataSet();
    if (!IsPostBack)
    {
        GetDDLsItems();
        FillFields();
    }
    else
    {
        //FillFields();
    }
}
protected void btnUpdate_Click(object sender, EventArgs e)
{
    string update_error = "";
    string SOEID = txtSOEID.Text;
    string firstName = txtFirstName.Text;
    string lastName = txtLastName.Text;
    string email = txtEmail.Text.Trim();
    int remsCode = Convert.ToInt32(ddlREMS.SelectedItem.ToString());
    int active = Convert.ToInt32(ddlActive.SelectedValue);
    int isGVO = Convert.ToInt32(ddlIsGVO.SelectedValue);
    int gvoTeamID = Convert.ToInt32(ddlGVOTeams.SelectedValue);
    int profileID = Convert.ToInt32(ddlProfiles.SelectedValue);
    int isSOW = Convert.ToInt16(ddlIsSOW.SelectedValue);
    int headcount = Convert.ToInt32(ddlHeadcount.SelectedValue);
    string updater_domain = p.Identity.Name.ToString();
    string updater = "";
    int index = updater_domain.IndexOf("''");
    int email_at_index = email.IndexOf("@");
    if (index != -1)
    {
        updater = updater_domain.Substring(index + 1, 7);
    }
    else
    {
        updater = updater_domain;
    }
    if (firstName.Length < 2)
    {
        update_error = "First Name should have at least 2 characters. ";
        lblStatus.Text = update_error;
        lblStatus.ForeColor = System.Drawing.Color.Red;
        lblStatus.Visible = true;
    }
    else if (lastName.Length < 2)
    {
        update_error = update_error + "Last Name should have at least 2 characters. ";
        lblStatus.Text = update_error;
        lblStatus.ForeColor = System.Drawing.Color.Red;
        lblStatus.Visible = true;
    }
    else if (email_at_index == -1 && email.Length < 5)
    {
        update_error = update_error + "Invalid email address.";
        lblStatus.Text = update_error;
        lblStatus.ForeColor = System.Drawing.Color.Red;
        lblStatus.Visible = true;
    }
    else
    {
        // create ConnectDatabase object to get acces to its methods
        ConnectDatabase connectDB = new ConnectDatabase();
        IDBManager dbManager = connectDB.ConnectDB();
        DataSet ds = new DataSet();
        try
        {
            dbManager.Open();
            dbManager.CreateParameters(13);
            dbManager.AddParameters(0, "@SOEID", SOEID);
            dbManager.AddParameters(1, "@firstName", firstName);
            dbManager.AddParameters(2, "@LastName", lastName);
            dbManager.AddParameters(3, "@Email", email);
            dbManager.AddParameters(4, "@REMSCode", remsCode);
            dbManager.AddParameters(5, "@Active", active);
            dbManager.AddParameters(6, "@IsGVO", isGVO);
            dbManager.AddParameters(7, "@gvoTeamID", gvoTeamID);
            dbManager.AddParameters(8, "@profileID", profileID);
            dbManager.AddParameters(9, "@isSOW", isSOW);
            dbManager.AddParameters(10, "@headcount", headcount);
            dbManager.AddParameters(11, "@lastUpdatedBy", updater);
            dbManager.AddParameters(12, "@status", active);
            dbManager.ExecuteNonQuery(CommandType.StoredProcedure, "sp_update_user");
        }
        catch (Exception error)
        {
            HttpContext.Current.Response.Write(error.ToString());
        }
        finally
        {
            dbManager.Close();
            dbManager.Dispose();
            lblStatus.Visible = true;
            lblStatus.Text = "User data updated successfully.";
            lblStatus.ForeColor = System.Drawing.Color.Green;
            FillFields();
        }
    }
}
protected void btnCancel_Click(object sender, EventArgs e)
{
    FillFields();
    gvREMSDetails.Visible = false;
}
private void FillFields()
{
    string soeid = Convert.ToString(Request["soeid"]);
    DataSet dsUserDetails = new DataSet();
    DataTable dtUserDetails = new DataTable();
    DataSet dsDDLs = new DataSet();
    dsUserDetails = GetUserDetails(soeid);
    dtUserDetails = dsUserDetails.Tables[0];
    string gvoTeam = dtUserDetails.Rows[0].ItemArray[8].ToString();
    string profile = dtUserDetails.Rows[0].ItemArray[10].ToString();
    string remsCode = dtUserDetails.Rows[0].ItemArray[4].ToString();
    txtSOEID.Text = dtUserDetails.Rows[0].ItemArray[0].ToString();
    txtFirstName.Text = dtUserDetails.Rows[0].ItemArray[1].ToString();
    txtLastName.Text = dtUserDetails.Rows[0].ItemArray[2].ToString();
    txtEmail.Text = dtUserDetails.Rows[0].ItemArray[3].ToString();
    ddlREMS.SelectedValue = remsCode.ToString();
    txtAddress.Text = dtUserDetails.Rows[0].ItemArray[5].ToString();
    //Response.Write((Convert.ToInt16(dtUserDetails.Rows[0].ItemArray[6])).ToString());
    ddlActive.SelectedValue = (Convert.ToInt16(dtUserDetails.Rows[0].ItemArray[6])).ToString();
    ddlIsGVO.SelectedValue = (Convert.ToInt16(dtUserDetails.Rows[0].ItemArray[7])).ToString();
    ddlGVOTeams.SelectedValue = gvoTeam;
    ddlProfiles.SelectedValue = profile;
    ddlIsSOW.SelectedValue = (Convert.ToInt16(dtUserDetails.Rows[0].ItemArray[12])).ToString();
    lblLastUpdatedBy_value.Text = dtUserDetails.Rows[0].ItemArray[14].ToString();
    lblLastUpdatedDate_value.Text = dtUserDetails.Rows[0].ItemArray[15].ToString();
}
protected void btnGetREMSdetails_Click(object sender, EventArgs e)
{
    //int remsCode = Convert.ToInt32(ddlREMS.SelectedValue);
    // create ConnectDatabase object to get acces to its methods
    ConnectDatabase connectDB = new ConnectDatabase();
    IDBManager dbManager = connectDB.ConnectDB();
    DataSet ds = new DataSet();
    try
    {
        dbManager.Open();
        dbManager.CreateParameters(1);
        dbManager.AddParameters(0, "@remscode", Convert.ToInt32(ddlREMS.SelectedValue));
        ds = dbManager.ExecuteDataSet(CommandType.Text, "select * from vwREMSDetails where [rems code] = @remscode");
        gvREMSDetails.DataSource = ds;
        gvREMSDetails.DataBind();
        gvREMSDetails.Visible = true;
    }
    catch (Exception error)
    {
        HttpContext.Current.Response.Write(error.ToString());
    }
    finally
    {
        dbManager.Close();
        dbManager.Dispose();
    }
}
private static DataSet GetUserDetails(string soeid)
{
    // create ConnectDatabase object to get acces to its methods
    ConnectDatabase connectDB = new ConnectDatabase();
    IDBManager dbManager = connectDB.ConnectDB();
    DataSet ds = new DataSet();
    try
    {
        dbManager.Open();
        dbManager.CreateParameters(1);
        dbManager.AddParameters(0, "@soeid", soeid);
        ds = dbManager.ExecuteDataSet(CommandType.Text, "select * from vwUsersDetails where soeid = @soeid");
    }
    catch (Exception error)
    {
        HttpContext.Current.Response.Write(error.ToString());
    }
    finally
    {
        dbManager.Close();
        dbManager.Dispose();
    }
    return ds;
}
private void GetDDLsItems()
{
    // create ConnectDatabase object to get acces to its methods
    ConnectDatabase connectDB = new ConnectDatabase();
    IDBManager dbManager = connectDB.ConnectDB();
    DataSet ds = new DataSet();
    try
    {
        dbManager.Open();
        ds = dbManager.ExecuteDataSet(CommandType.StoredProcedure, "sp_select_edit_user_ddls");
        ddlREMS.DataSource = ds.Tables[0];
        ddlREMS.DataTextField = "remsCode";
        ddlREMS.DataValueField = "remsCode";
        ddlREMS.DataBind();
        ddlActive.DataSource = ds.Tables[1];
        ddlActive.DataTextField = "Active";
        ddlActive.DataValueField = "ActiveID";
        ddlActive.DataBind();
        ddlIsGVO.DataSource = ds.Tables[2];
        ddlIsGVO.DataTextField = "IsGVO";
        ddlIsGVO.DataValueField = "IsGVOID";
        ddlIsGVO.DataBind();
        //methods.GetGVOFunctions(ddlGVOFunctions);
        //int? gvoFunctionID = string.IsNullOrEmpty(ddlGVOFunctions.SelectedValue) ? (int?)null : (int?)Convert.ToInt32(ddlGVOFunctions.SelectedValue);
        methods.GetGVOTeams(null, ddlGVOTeams);
        ddlProfiles.DataSource = ds.Tables[3];
        ddlProfiles.DataTextField = "profilename";
        ddlProfiles.DataValueField = "profileID";
        ddlProfiles.DataBind();
        ddlIsSOW.DataSource = ds.Tables[4];
        ddlIsSOW.DataTextField = "IsSOW";
        ddlIsSOW.DataValueField = "IsSOWID";
        ddlIsSOW.DataBind();
        ddlHeadcount.DataSource = ds.Tables[5];
        ddlHeadcount.DataTextField = "Headcount";
        ddlHeadcount.DataValueField = "HeadcountID";
        ddlHeadcount.DataBind();
    }
    catch (Exception error)
    {
        HttpContext.Current.Response.Write(error.ToString());
    }
    finally
    {
        dbManager.Close();
        dbManager.Dispose();
    }
}

}

Postback vs Button_Click

我不是 100% 我完全理解这个问题,但在我看来,你需要有

if(!IsPostBack) 
{ 
     // load dropdown data here 
}

将所有数据加载到下拉列表中的位置,然后在下拉列表中具有

<asp:DropDownList SelectedIndexChanged="ddlDropdown_SelectedIndexChanged" id="ddlDropdown" AutoPostBack="true"></asp:DropDownList>

然后在你的代码后面有

protected void ddlDropDown_SelectedIndexChanged(object sender, EventArgs e)
{
}