2011-05-17 34 views
0

我正在使用C#ASP.NET,並且我有一個提交頁面,當您單擊添加產品鏈接時,會打開一個彈出式「添加產品」頁面,該頁面上可以添加產品的下拉列表提交。業務規則規定每個產品在任何提交中只能有一個實例,所以我運行了兩個單獨的switch case語句,一個用於在彈出窗口中選中它們時從下拉列表中刪除項目,另一個用於查詢數據庫來確定是否有任何產品已與提交相關聯,如果是,則從下拉列表中刪除這些選項。一旦用戶從下拉菜單中選擇一個項目,該產品的面板就會顯示出來供用戶輸入。切換案例與dropdownlist可用性/面板可見性是否衝突?

這兩個開關櫃都起作用,因爲它們消除了不應該使用的物品,但是由於我把查詢到的開關櫃放入,選擇後面板不再可見。當我移除查詢的開關盒時,面板在選擇時確實變得可見,但已經與提交相關聯的產品仍可在下拉菜單中使用。

我知道這裏有衝突的地方,但我對這是什麼,因爲這是我第一次去編程。代碼如下。請自行忽略這些疑問;這是一個非主動的培訓項目,我的處理程序禁止參數化,因爲他希望我先學習基本知識。我瞭解注入漏洞。

public partial class AddProduct : System.Web.UI.Page 
{ 


protected void BtnAddProduct_Click(object sender, EventArgs e) 
{ 
    switch (DdlProductList.SelectedValue) 
    { 
     case "1": 
      PanelEpl.Visible = true; 
      DdlProductList.Items.Remove(DdlProductList.SelectedItem); 
      break; 
     case "2": 
      PanelProf.Visible = true; 
      DdlProductList.Items.Remove(DdlProductList.SelectedItem); 
      break; 
     case "3": 
      PanelCrime.Visible = true; 
      DdlProductList.Items.Remove(DdlProductList.SelectedItem); 
      break; 
     case "4": 
      PanelFid.Visible = true; 
      DdlProductList.Items.Remove(DdlProductList.SelectedItem); 
      break; 
     case "5": 
      PanelNotProf.Visible = true; 
      DdlProductList.Items.Remove(DdlProductList.SelectedItem); 
      break; 
     case "6": 
      PanelPriv.Visible = true; 
      DdlProductList.Items.Remove(DdlProductList.SelectedItem); 
      break; 
     case "7": 
      PanelPub.Visible = true; 
      DdlProductList.Items.Remove(DdlProductList.SelectedItem); 
      break; 
     default: 

       break; 
     } 
    } 

    protected void Page_Load(object sender, EventArgs e) 
    { 

     string x = Request.QueryString["SubId"]; 
     string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
     string displayQuery = "SELECT CustName, CustAdd, CustCity, CustState, CustZip FROM Customer WHERE SubId =" + x; 
     string broQuery = "SELECT EntityType FROM Broker WHERE SubId =" + x; 
     string ddlQuery = "SELECT ProductId FROM SubmissionProducts WHERE SubmissionId =" + x; 
     using (SqlConnection displayConn = new SqlConnection(connectionString)) 
     { 
      displayConn.Open(); 
      SqlCommand DlistCmd = new SqlCommand(ddlQuery, displayConn); 

      using (SqlDataReader Ddldr = DlistCmd.ExecuteReader()) 
      { 
       while (Ddldr.Read()) 
       { 

        switch (Ddldr.GetInt32(0)) 
        { 
         case 1: 
          DdlProductList.Items.RemoveAt(1); 
          break; 
         case 2: 
          DdlProductList.Items.RemoveAt(2); 
          break; 
         case 3: 
          DdlProductList.Items.RemoveAt(3); 
          break; 
         case 4: 
          DdlProductList.Items.RemoveAt(4); 
          break; 
         case 5: 
          DdlProductList.Items.RemoveAt(5); 
          break; 
         case 6: 
          DdlProductList.Items.RemoveAt(6); 
          break; 
         case 7: 
          DdlProductList.Items.RemoveAt(7); 
          break; 
         default: 
          break; 
        } 

       } 

      } 
+0

嘿@gbn,只是出於好奇,當你編輯我的問題你會怎麼做? (真的,只是好奇心,我不是領土或任何東西:D) – 2011-05-17 06:30:02

+0

我改變了標籤。你說「請自己忽略這些查詢」,所以我刪除了SQL Server相關的版本 – gbn 2011-05-17 06:58:52

回答

1

我認爲你沒有考慮Page回髮狀態。把If(!IsPostBack)條件下,您的Page_Load代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 
If(!IsPostBack) 
{ 
    string x = Request.QueryString["SubId"]; 
    string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString; 
    string displayQuery = "SELECT CustName, CustAdd, CustCity, CustState, CustZip FROM Customer WHERE SubId =" + x; 
    string broQuery = "SELECT EntityType FROM Broker WHERE SubId =" + x; 
    string ddlQuery = "SELECT ProductId FROM SubmissionProducts WHERE SubmissionId =" + x; 
    using (SqlConnection displayConn = new SqlConnection(connectionString)) 
    { 
     displayConn.Open(); 
     SqlCommand DlistCmd = new SqlCommand(ddlQuery, displayConn); 

     using (SqlDataReader Ddldr = DlistCmd.ExecuteReader()) 
     { 
      while (Ddldr.Read()) 
      { 

       switch (Ddldr.GetInt32(0)) 
       { 
        case 1: 
         DdlProductList.Items.RemoveAt(1); 
         break; 
        case 2: 
         DdlProductList.Items.RemoveAt(2); 
         break; 
        case 3: 
         DdlProductList.Items.RemoveAt(3); 
         break; 
        case 4: 
         DdlProductList.Items.RemoveAt(4); 
         break; 
        case 5: 
         DdlProductList.Items.RemoveAt(5); 
         break; 
        case 6: 
         DdlProductList.Items.RemoveAt(6); 
         break; 
        case 7: 
         DdlProductList.Items.RemoveAt(7); 
         break; 
        default: 
         break; 
       } 

      } 

     } 
+0

明天你可以贏得幾次彩票,感謝你的好意@Muhammad。精彩而簡單。我想認爲,如果我已經22小時沒有起來,我會想到這一點,但說實話,這不太可能。希望我能儘快付清。謝謝。 – 2011-05-17 06:27:33

+0

而且,爲了記錄,我將if(!Page.IsPostBack)行放在我使用的(SqlDataReader ...)行的上方,以保持上面其他行的完整性。 – 2011-05-17 06:28:42