2010-10-25 1 views
2

Я использую функции локальной базы данных в Chrome и Safari, а то, что я делаю, когда я хочу сохранить это в удаленной базе данных, - это создать скрытое текстовое поле, а затем используя JSON для строковой последовательности каждой строки. В коде позади я анализирую каждый объект JSON и вставляю его в список. Теперь я хочу удалить эти строки из локальной базы данных. У меня есть функция JavaScript под названием deletePatient:Как вызвать функцию JavaScript несколько раз в цикле при перезагрузке страницы с помощью ASP.NET

function deletePatient(patientID) { 
     MaRDB.transaction(
     function (transaction) { 
      transaction.executeSql("DELETE FROM Patients WHERE id = " + patientID + ";"); 
     } 
    ); 
} 

Я затем вызвать эту функцию из кода позади, если вставка была преуспевающим

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Delete", "<script language='javascript'>$(document).ready(function() {deletePatient(" + id + ");});</script>"); 

Однако, она удаляет только пациента с наименьшим идентификатором (первый JSON). Когда я просматриваю код, он возвращается к этому коду для каждого ID, но только удаляет его. Если я попытаюсь с предупреждением, он также отображает только один идентификатор, даже если он выполняет итерацию через код N раз. Я предполагаю, что это какой-то конфликт с обратной передачей и выполнение функции JavaScript здесь, но можно ли решить эту проблему?

protected void btnSave_Click(object sender, EventArgs e) 
     { 
      bool successfullySent = false; 

      SharePointConnection(); 
      int count = Convert.ToInt32(txtRows.Text); 

      for (int i = 0; i <= count; i++) 
      { 
       string p = String.Format("{0}", Request.Form["hiddenField" + i]).ToString(); 
       JObject o = JObject.Parse(p); 
       id = (int)o["id"]; 
       string name = (string)o["name"]; 
       string address = (string)o["address"]; 
       string city = (string)o["city"]; 
       string state = (string)o["state"]; 
       string zip = (string)o["zip"]; 
       string country = (string)o["country"]; 
       string phone = (string)o["phone"]; 

      StringBuilder sb_method = new StringBuilder(); 
      sb_method.Append("<Method ID='1' Cmd='New'>"); 

      sb_method.Append("<Field Name='Title'>" + name + "</Field>"); 
      sb_method.Append("<Field Name='Address'>" + address + "</Field>"); 
      sb_method.Append("<Field Name='City'>" + city + "</Field>"); 
      sb_method.Append("<Field Name='State'>" + state + "</Field>"); 
      sb_method.Append("<Field Name='ZIP'>" + zip + "</Field>"); 
      sb_method.Append("<Field Name='Country'>" + country + "</Field>"); 
      sb_method.Append("<Field Name='Phone'>" + phone + "</Field>"); 

      sb_method.Append("</Method>"); 

      XmlDocument x_doc = new XmlDocument(); 
      XmlElement xe_batch = x_doc.CreateElement("Batch"); 
      xe_batch.SetAttribute("OnError", "Continue"); 

      xe_batch.InnerXml = sb_method.ToString(); 

      try 
      { 
       //updating the list 
       XmlNode xn_return = listsObj.UpdateListItems(ConfigurationManager.AppSettings["SaveToSPList"].ToString(), xe_batch); 

       if (xn_return.InnerText == "0x00000000") 
       { 
        successfullySent = true; 
       } 
       else 
       { 
        successfullySent = false; 
       } 
      } 
      catch 
      { 
       successfullySent = false; 
      } 

      if (successfullySent) 
      { 
       divSuccessfulMessage.Visible = true; 
       lblSuccessfulMessage.Text = "Report Successfully Saved"; 

       Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Delete", "<script language='javascript'>$(document).ready(function() {deletePatient(" + id + ");});</script>"); 

      } 
      else 
      { 
       divErrorMessage.Visible = true; 
       lblErrorMessage.Text = "Failed to Save, Please Try Again"; 
      } 
     } 

} 

Заранее спасибо.

ответ

4

Я предполагаю, что вы несколько раз вызываете RegisterClientScriptBlock? В этом случае вторым параметром вашего RegisterClientScriptBlock является уникальный ключ сценария, который вы пытаетесь ввести. Поскольку он всегда один и тот же, в действительности вы в основном «перезаписываете» каждый предыдущий скрипт с последним.

Попробуйте еще раз и убедитесь, что ваш ключ уникален при каждом вызове RegisterClientScriptBlock (например, добавьте к нему счетчик?).

Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "Delete" + counter.ToString(), "<script language='javascript'>$(document).ready(function() {deletePatient(" + id + ");});</script>"); 
+0

Пятно на Сэме, спасибо вам большое. – Morgan