各位专家,在通过Java Script调用C#页面但未能成功保存数据, 相关代码和过程如下:----------------------------------Java Script部分代码----------------------------------------------function saveTo()
{
var xmlTemp = new ActiveXObject("Microsoft.XMLDOM");
var root = xmlTemp.createNode(1,"data","");
xmlTemp.appendChild(root);
var node = xmlTemp.createNode(1,"row","");
node.setAttribute("name", $("Value_LoginID").value);
node.setAttribute("password", $("Value_Password").value);
root.appendChild(node);
var action = "save.aspx";
var postdata = xmlTemp.xml; AddButtonAction(action, postdata);
}function AddButtonAction(action, postdata)
{
var _cfg = {name: "data", cgi: action, value: postdata};
var sFormName = "_form_" + _cfg["name"] + "_";
var sFrameName = "_frame_" + _cfg["name"] + "_";
var oFormName = $(sFormName);
var oFrameName = $(sFrameName);
if(oFormName != null) {
oFormName.removeNode(true);
}
if(oFrameName != null) {
oFrameName.removeNode(true);
}
if(window.Event) {
var oFrame = document.createElement("iframe");
oFrame.name = sFrameName;
}
else {
var oFrame = document.createElement("<iframe name='" + sFrameName + "'></iframe>");
}
oFrame.id = sFrameName;
oFrame.style.display = "none";
var oForm = document.createElement("form");
oForm.id = sFormName;
oForm.name = sFormName;
oForm.action = _cfg["cgi"];
oForm.method = "post";
oForm.style.display = "none";
oForm.target = sFrameName; oInput = document.createElement("input");
//oInput.type = "hidden";
oInput.value = _cfg["value"];
oInput.name = "post_data[]";
oForm.appendChild(oInput); document.body.appendChild(oForm);
document.body.appendChild(oFrame);
oForm.submit();
}function $(_sId)
{
return document.getElementById(_sId);
}----------------------------------Java Script部分代码--------------------------------------------------------------------------------C#部分代码(save.aspx)----------------------------------------------private void Page_Load(object sender, EventArgs e)
{
if(Request.HttpMethod.ToLower()=="post")
{
string post_data = Request.Form["post_data[]"];
if(post_data==null||post_data=="")
return;
XmlDocument root = new XmlDocument();
root.LoadXml(post_data);
XmlElement node = (XmlElement)root.DocumentElement.ChildNodes[0];
string strsql = "Insert into TeamUser(fchrCodeID, fchrLoginID, fchrPassword) values('"+ md5(node.GetAttribute("name")) +"', '"+ node.GetAttribute("name") +"', '"+ md5(node.GetAttribute("password")) +"')"; ExecuteSQL(strsql);
Response.Write("<script language=\"javascript\">;\r\n");
Response.Write("alert('数据保存成功!');\r\n");
Response.Write("window.parent.location.reload();\r\n");
Response.Write("</"+"script>");
}
}----------------------------------C#部分代码(save.aspx)----------------------------------------------在通过VS2010调试时没有发现Java Script和C#的语法错误, 若postdata通过普通字符串方式(不是XML方式)传给save.aspx就可成功保存数据; 若通过XML方式传值给save.aspx, 在通过VS2010调试时会陷入到一个调试器生成的一个临时JS文件的死循环中, 期待着专家的解答和解决办法, 非常感谢!
{
var xmlTemp = new ActiveXObject("Microsoft.XMLDOM");
var root = xmlTemp.createNode(1,"data","");
xmlTemp.appendChild(root);
var node = xmlTemp.createNode(1,"row","");
node.setAttribute("name", $("Value_LoginID").value);
node.setAttribute("password", $("Value_Password").value);
root.appendChild(node);
var action = "save.aspx";
var postdata = xmlTemp.xml; AddButtonAction(action, postdata);
}function AddButtonAction(action, postdata)
{
var _cfg = {name: "data", cgi: action, value: postdata};
var sFormName = "_form_" + _cfg["name"] + "_";
var sFrameName = "_frame_" + _cfg["name"] + "_";
var oFormName = $(sFormName);
var oFrameName = $(sFrameName);
if(oFormName != null) {
oFormName.removeNode(true);
}
if(oFrameName != null) {
oFrameName.removeNode(true);
}
if(window.Event) {
var oFrame = document.createElement("iframe");
oFrame.name = sFrameName;
}
else {
var oFrame = document.createElement("<iframe name='" + sFrameName + "'></iframe>");
}
oFrame.id = sFrameName;
oFrame.style.display = "none";
var oForm = document.createElement("form");
oForm.id = sFormName;
oForm.name = sFormName;
oForm.action = _cfg["cgi"];
oForm.method = "post";
oForm.style.display = "none";
oForm.target = sFrameName; oInput = document.createElement("input");
//oInput.type = "hidden";
oInput.value = _cfg["value"];
oInput.name = "post_data[]";
oForm.appendChild(oInput); document.body.appendChild(oForm);
document.body.appendChild(oFrame);
oForm.submit();
}function $(_sId)
{
return document.getElementById(_sId);
}----------------------------------Java Script部分代码--------------------------------------------------------------------------------C#部分代码(save.aspx)----------------------------------------------private void Page_Load(object sender, EventArgs e)
{
if(Request.HttpMethod.ToLower()=="post")
{
string post_data = Request.Form["post_data[]"];
if(post_data==null||post_data=="")
return;
XmlDocument root = new XmlDocument();
root.LoadXml(post_data);
XmlElement node = (XmlElement)root.DocumentElement.ChildNodes[0];
string strsql = "Insert into TeamUser(fchrCodeID, fchrLoginID, fchrPassword) values('"+ md5(node.GetAttribute("name")) +"', '"+ node.GetAttribute("name") +"', '"+ md5(node.GetAttribute("password")) +"')"; ExecuteSQL(strsql);
Response.Write("<script language=\"javascript\">;\r\n");
Response.Write("alert('数据保存成功!');\r\n");
Response.Write("window.parent.location.reload();\r\n");
Response.Write("</"+"script>");
}
}----------------------------------C#部分代码(save.aspx)----------------------------------------------在通过VS2010调试时没有发现Java Script和C#的语法错误, 若postdata通过普通字符串方式(不是XML方式)传给save.aspx就可成功保存数据; 若通过XML方式传值给save.aspx, 在通过VS2010调试时会陷入到一个调试器生成的一个临时JS文件的死循环中, 期待着专家的解答和解决办法, 非常感谢!
只是,就两个参数而已,没必要还传XML。再一个,你可以使用ajax代替你的iframe模拟无刷新,这样大量参数时,你可以考虑传json
ValidateRequest=false