2012-09-19 59 views
0

我有一個問題,我從選定的複選框中獲取一個ID,然後將它發送到一個刪除方法,然後它將ID傳遞給存儲過程。但是我遇到的問題是,它以錯誤的格式(「232,4323」)而不是(「232」,「4323」)返回我的ID,所以當將值傳遞給存儲過程時,由於字符串格式。 這是我在aspx中的代碼。ajax返回錯誤格式的ID

function doTheDelete(doIDeleteTimeTracker) { 
    var selectedTimeTrackerList = getSelectedTimeTrackerIDs(); 
    if (selectedTimeTrackerList.length > 0) { 
     $.ajax({ 
      type: "POST", 
      //url: "/Tasks/ViewTasks.aspx/deleteTasksAndLinkedItems", 
      url: '<%=ResolveUrl("~/TimeTrackers/ViewTimeTrackers.aspx/deleteSelectedTimeTracker")%>', 
      data: "{'DeleteTimeTracker' : '" + doIDeleteTimeTracker + "'," + "'TimeBill': ['" + selectedTimeTrackerList.join(',') + "']}", 
      //dataaaaaa 
      contentType: "application/json; charset=utf-8", 
      dataType: "json", 
      success: function (data) { 
       var ss = data.d; 
       if (ss.length > 0) { 
        for (var i = 0; i < ss.length; ++i) { 
         $.noty.consumeAlert({ layout: 'center', type: 'error', dismissQueue: true }); 
         alert(ss[i]); 
        } 
       } 
       $("#viewTimeTrackersGrid").flexReload(); 
       showMessage('Successfully Removed Time Tracker'); 
      }, 
      error: function (data) { 
       $.noty.consumeAlert({ layout: 'center', type: 'error', dismissQueue: true, modal: true }); 
       alert('Error Deleting Time Tracker'); 
       if (window.console) { 
        console.log(data); 
       } 
      } 
     }); 
    } else { 
     showMessage('No time tracker(s) are selected.'); 
    } 
} 

這裏是我的代碼後面的刪除方法。

public static string[] deleteSelectedExpense(bool DeleteExpenses, String[] ExpId) 
{ 
    var rList = new List<string>(); 
    //var canDeleteTasks = false; 
    //var canDeleteTrackers = false; 
    var canDeleteExpenses = false; 
    var investigatorID = (int)HttpContext.Current.Session["InvestigatorID"]; 
    var conn = new SqlConnection(ConfigurationManager.ConnectionStrings["connect"].ToString()); 
    var cmd = new SqlCommand("p_Admin_Permissions_CanDeleteExpenses", conn); 
    cmd.Parameters.Add(new SqlParameter("@InvestigatorID", SqlDbType.Int)); 
    cmd.Parameters["@InvestigatorID"].Value = investigatorID; 
    cmd.CommandType = CommandType.StoredProcedure; 
    try 
    { 
     conn.Open(); 
     canDeleteExpenses = (bool)cmd.ExecuteScalar(); 
    } 
    catch (SqlException sql) 
    { 
     if (!rList.Contains("Can not connect to the database. Please try again.")) 
      rList.Add("Can not connect to the database. Please try again."); 
    } 
    catch (Exception ex) 
    { 
     if (!rList.Contains("An Error Occured")) 
      rList.Add("An Error Occured"); 
    } 
    finally 
    { 
     if (conn.State == ConnectionState.Open) 
      conn.Close(); 
    } 

    if (canDeleteExpenses) 
    { 
     foreach (var expense in ExpId)// expense ends up beng ("232,423") instead of just taking 1 string at a time ("232").....("423")... 
     { 

      if (canDeleteExpenses) 
      { 
       conn = new SqlConnection(ConfigurationManager.ConnectionStrings["OSCIDConnectionString"].ToString()); 
       cmd = new SqlCommand("p_CaseFiles_Expenses_DeleteExpenses", conn); 
       cmd.Parameters.Add(new SqlParameter("@ExpID", SqlDbType.Int)); 
       cmd.Parameters["@ExpID"].Value = int.Parse(expense); 
       cmd.Parameters.Add("@Message", SqlDbType.NVarChar, 50); 
       cmd.Parameters["@Message"].Direction = ParameterDirection.Output; 
       cmd.CommandType = CommandType.StoredProcedure; 
       try 
       { 
        conn.Open(); 
        cmd.ExecuteNonQuery(); 
       } 
       catch (SqlException sql) 
       { 
        if (!rList.Contains("Error Connecting to the Database. Unable To Delete Expense(s).")) 
         rList.Add("Error Connecting to the Database. Unable To Delete Expense(s)."); 
       } 
       catch (Exception ex) 
       { 
        if (!rList.Contains("An Error Occured")) 
         rList.Add("An Error Occured"); 
       } 
       finally 
       { 
        if (conn.State == ConnectionState.Open) 
         conn.Close(); 
       } 
      } 
      else if (!canDeleteExpenses) 
      { 
       rList.Add("You do not have permission to delete Expenses"); 
      } 
      else 
      { 
       if (!rList.Contains("You do not have permission to delete the Expense(s).")) 
        rList.Add("You do not have permission to delete the Expense(s)."); 
      } 
     } 
    } 
    return rList.ToArray(); 
} 

我猜測它可能是在「數據:」在Ajax調用格式化的陣列(我試過幾件事情)

回答

1

感謝幫助幫助。我設法修復它。解決辦法是要做到這一點:

"'ExpId': ['" + selectedExpensesList.join('\',\'') + "']}", 

代替:

"'ExpId': ['" + selectedExpensesList.join(',') + "']}", 

添加額外「似乎工作。然後,它設法採取每個ID分開,而不是採取整個陣列和pooping我

1

嘗試:

... 'TimeBill': ['" + selectedTimeTrackerList.join('","') + "']}" ... 

雖然更好的解決方案是創建一個具有所需屬性的完整javascript對象,並將其作爲參數應用。順便說一句,如果僅在此頁面上調用此方法,則可能需要考慮使用諸如PageMethods而非jQuery之類的內容。

+0

我試過了,但是當它到達部分後面的代碼它返回字符串格式爲「232 \」,「32 \」。由於某種原因,在foreach循環中,它不會抓住foreach。它出於某種原因需要整個數組而不是迭代它 – user1084319

1

沒有理由創建一個字符串發送爲Data,您可以發送一個json對象。

Data: { 
     DeleteTimeTracker: doIDeleteTimeTracker, 
     TimeBill: selectedTimeTrackerList 
     }, ... 
+0

我會嘗試它。由於某種原因,在foreach循環中,它不會抓住foreach。它出於某種原因需要整個數組,而不是迭代它 – user1084319

+0

我不是一個大的asp.net用戶,但通常你不使用'foreach'數組類型。我通常使用for循環,如'for(int i = 0; i Bill

+0

我也會使用for循環,但之前編寫這段代碼的人使用的是foreach,所以我不想改變太多。我會嘗試。我也嘗試了上面的方法,但調用方法永遠不會被執行,因爲它在Data中打破:{... – user1084319