ASP.net c# - 重定向用户Edit和Add New的不同模式

时间:2012-11-25 23:15:56

标签: c# asp.net sql

我有一个表单,它会在db中返回客户列表。还有一个添加客户按钮,用于添加新客户和超链接,用户可以在其中编辑现有客户。单击编辑链接时,我能够为该客户带回正确的数据,但如果我进行更改并单击“更新”按钮,则不会编辑现有数据。另一个问题是,在重定向以添加新客户时,用户也会出现“更新”按钮(用户输入新客户的数据并单击“更新”)。是否可以为不同的操作(添加新的或编辑)/查询引用不同的代码?这是我到目前为止所拥有的。谢谢你的帮助。

<asp:Content ID="Content1" ContentPlaceHolderID="chpContent" runat="server">
<div>
    <h2>Customer Listing</h2>
    <br />
</div>
<p style="text-align:center">
    <asp:Button ID="btnCustomer" class="button" runat="server" Text="Add New Customer" onclick="btnCustomer_Click" />
</p>

<asp:ListView ID="lv" runat="server" 
    onselectedindexchanged="lv_SelectedIndexChanged">
<LayoutTemplate>
  <table width="110%" class="TableListing">
  <tbody>
    <thead>
    <th width="150">Customer Name</th>
      <th width="150">Email</th>
      <th width="150">City</th>
      <th width="40">State</th>
      <th width="110">Phone</th>
      <th width="80">Modify</th>
    </thead>
    <tr id="itemPlaceholder" runat="server"></tr>
     </tbody>
    </table>  

    <asp:DataPager ID="ItemDataPager" runat="server" PageSize="20">
        <Fields>
            <asp:NumericPagerField ButtonCount="5" />
        </Fields>
    </asp:DataPager>

</LayoutTemplate>

<ItemTemplate>
    <tr>
     <td><%# Eval ("LastName") %>, <%# Eval ("FirstName") %></td>
     <td><%# Eval ("Email") %></td>
     <td><%# Eval ("City") %></td>
     <td><%# Eval ("State") %></td>
     <td><%# Eval ("Phone") %></td>
     <td>
        <asp:HyperLink ID="lnkEdit" runat="server" NavigateUrl='<%# "CustomerEdit.aspx?ID=" + Eval("CustomerID") %>' Text="Edit" />
    </td>
    </tr>
</ItemTemplate>

这是我的CustomerEdit.aspx页面:

public partial class CustomerEdit : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        this.Master.HighlightNavItem("Customers");

        int CustomerID = Int32.Parse(Request.QueryString["ID"]);

        //Declare the connection object
        SqlConnection Conn = new SqlConnection();
        Conn.ConnectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

        //Connect to the db
        Conn.Open();

        //Define query
        string sql = "SELECT * FROM Customer where CustomerID=@CustomerID";

        //Declare the Command
        SqlCommand cmd = new SqlCommand(sql, Conn);

        //Add the parameters needed for the SQL query
        cmd.Parameters.AddWithValue("@CustomerID", CustomerID);

        //Declare the DataReader
        SqlDataReader dr = null;

        //Fill the DataReader
        dr = cmd.ExecuteReader();

        //Get the data
        if (dr.Read() == false)
            {
                //No Records
                dr.Close();
                Conn.Close();
                return;
            }

    txtFirstName.Text = dr["FirstName"].ToString();
    txtLastName.Text = dr["LastName"].ToString();
    txtEmail1.Text = dr["Email"].ToString();
    txtEmail2.Text = dr["Email"].ToString();
    txtPassword1.Text = dr["Password"].ToString();
    txtPassword2.Text = dr["Password"].ToString();
    txtAddress1.Text = dr["Address1"].ToString();
    txtAddress2.Text = dr["Address2"].ToString();
    txtCity.Text = dr["City"].ToString();
    txtState.Text = dr["State"].ToString();
    txtZip.Text = dr["Zip"].ToString();
    txtPhone.Text = dr["Phone"].ToString();
    txtFax.Text = dr["Fax"].ToString();


    dr.Close();
    Conn.Close();

    }


    protected void btnCancel_Click1(object sender, EventArgs e)
    {
        Response.Redirect("Customers.aspx");
    }


    protected void btnUpdate_Click(object sender, EventArgs e)
    {

        int CustomerID = Int32.Parse(Request.QueryString["ID"]);

        //Declare the connection object
        SqlConnection Conn = new SqlConnection();
        Conn.ConnectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

        //Connect to the db
        Conn.Open();


        //Define query
        string sql = "UPDATE Customer SET Fax=@Fax Where CustomerID=@CustomerID";

        //Declare the Command
        SqlCommand cmd = new SqlCommand(sql, Conn);

        //Add the parameters needed for the SQL query
        cmd.Parameters.AddWithValue("@FirstName", txtFirstName.Text);
        cmd.Parameters.AddWithValue("@LastName", txtLastName.Text);
        cmd.Parameters.AddWithValue("@Email", txtEmail1.Text);
        cmd.Parameters.AddWithValue("@Password", txtPassword1.Text);
        cmd.Parameters.AddWithValue("@Address1", txtAddress1.Text);
        cmd.Parameters.AddWithValue("@Address2", txtAddress2.Text);
        cmd.Parameters.AddWithValue("@City", txtCity.Text);
        cmd.Parameters.AddWithValue("@State", txtState.Text);
        cmd.Parameters.AddWithValue("@Zip", txtZip.Text);
        cmd.Parameters.AddWithValue("@Phone", txtPhone.Text);
        cmd.Parameters.AddWithValue("@Fax", txtFax.Text);

        //Execute the query
        int NumRows = 0;
        NumRows = cmd.ExecuteNonQuery();

        Conn.Close();

        lblUpdate.Text = "Updated " + NumRows.ToString() + " record";

    }

}

}

我的Customers.aspx.cs页面,用户被重定向。

    public partial class Customers : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {      
          this.Master.HighlightNavItem("Customers");


        //Declare the connection object
        SqlConnection Conn = new SqlConnection();
        Conn.ConnectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

        //Connect to the db
        Conn.Open();

        //Define query
        string sql = "SELECT CustomerID, LastName, FirstName, Email, Password, Address1, Address2, City, State, Zip, Phone, Fax FROM Customer";

        //Declare a SQL Adapter
        SqlDataAdapter da = new SqlDataAdapter(sql, Conn);

        //Declare a DataTable
        DataTable dt = new DataTable();

        //Populate the DataTable
        da.Fill(dt);

        //Bind the Listview
        lv.DataSource = dt;
        lv.DataBind();

        dt.Dispose();
        da.Dispose();
        Conn.Close();

    }

            protected void btnCustomer_Click(object sender, EventArgs e)
         {
              Response.Redirect("CustomerEdit.aspx");                

          }

            protected void lv_SelectedIndexChanged(object sender, EventArgs e)
            {
                Response.Redirect("CustomerEdit.aspx");
            }

}

}

1 个答案:

答案 0 :(得分:2)

更新无效,因为您覆盖了页面加载上的数据。使用IsPostBack来避免这种情况:

protected void Page_Load(object sender, EventArgs e)
{
    this.Master.HighlightNavItem("Customers");

    if(!IsPostBack)
    {
        int CustomerID = Int32.Parse(Request.QueryString["ID"]);

        //Declare the connection object
        SqlConnection Conn = new SqlConnection();
        Conn.ConnectionString = ConfigurationManager.ConnectionStrings["MyDatabase"].ConnectionString;

        //Connect to the db
        Conn.Open();

        //Define query
        string sql = "SELECT * FROM Customer where CustomerID=@CustomerID";

        //Declare the Command
        SqlCommand cmd = new SqlCommand(sql, Conn);

        //Add the parameters needed for the SQL query
        cmd.Parameters.AddWithValue("@CustomerID", CustomerID);

        //Declare the DataReader
        SqlDataReader dr = null;

        //Fill the DataReader
        dr = cmd.ExecuteReader();

        //Get the data
        if (dr.Read() == false)
            {
                //No Records
                dr.Close();
                Conn.Close();
                return;
            }

        txtFirstName.Text = dr["FirstName"].ToString();
        txtLastName.Text = dr["LastName"].ToString();
        txtEmail1.Text = dr["Email"].ToString();
        txtEmail2.Text = dr["Email"].ToString();
        txtPassword1.Text = dr["Password"].ToString();
        txtPassword2.Text = dr["Password"].ToString();
        txtAddress1.Text = dr["Address1"].ToString();
        txtAddress2.Text = dr["Address2"].ToString();
        txtCity.Text = dr["City"].ToString();
        txtState.Text = dr["State"].ToString();
        txtZip.Text = dr["Zip"].ToString();
        txtPhone.Text = dr["Phone"].ToString();
        txtFax.Text = dr["Fax"].ToString();


        dr.Close();
        Conn.Close();
    }

}