gpt4 book ai didi

c# - 如何在使用 ASP.NET 重新加载页面时在循环中多次调用 JavaScript 函数

转载 作者:行者123 更新时间:2023-11-29 18:35:08 26 4
gpt4 key购买 nike

我在 Chrome 和 Safari 中使用本地数据库功能,当我想将其保存到远程数据库时,我所做的是创建一个隐藏的文本字段,然后使用 JSON 对每一行进行字符串化。在后面的代码中,我然后解析每个 JSON 对象并将其插入到列表中。我现在要做的是从本地数据库中删除这些行。我有一个名为 deletePatient 的 JavaScript 函数:

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>");

但是,它只会删除 ID 最低的患者(第一个 JSON 对象)。当我单步执行代码时,它会返回到每个 ID 的代码,但只删除一个。如果我尝试使用警报,它也只显示一个 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";
}
}

}

提前致谢。

最佳答案

我假设您多次调用 RegisterClientScriptBlock?在这种情况下,RegisterClientScriptBlock 的第二个参数是您尝试注入(inject)的脚本的唯一 键。由于它总是相同的,实际上您基本上是用最新的脚本“覆盖”之前的每个脚本。

再试一次,并确保每次调用 RegisterClientScriptBlock 时您的 key 都是唯一的(例如,向其附加一个计数器?)。

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

关于c# - 如何在使用 ASP.NET 重新加载页面时在循环中多次调用 JavaScript 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4011702/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com