各位专家,在通过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文件的死循环中, 期待着专家的解答和解决办法, 非常感谢!

解决方案 »

  1.   

    呃,你这就是制造了一个表单,然后发送的target是你动态创建的iframe中我测试了一下,也没什么问题呀,数据都可以获取到贴出你报错的信息来
      

  2.   

    你好,XML格式的数据传不到save.aspx里面,系统没有报错,尝试在save.aspx里面设了一些断点,但是在运行的过程中调试器就根本没运行到save.aspx里面所设的断点;相反地,若用普通字符串的格式传输数据给save.aspx, 一切正常, 调试时调试器也可运行到save.aspx里面所设的断点期待着进一步的解答。 谢谢
      

  3.   

    crying_boy, 你好! SaveTo()可以把数据传到AddButtonAction(),但是正如上描述执行AddButtonAction()时似乎没有传值(XML格式)给save.aspx,奇怪的是,传普通字符串的值给save.aspx就一切正常,问题到底出在哪??
      

  4.   

    我拿你的例子测试过,XML是可以传达的。
    只是,就两个参数而已,没必要还传XML。再一个,你可以使用ajax代替你的iframe模拟无刷新,这样大量参数时,你可以考虑传json
      

  5.   

    在这里只传两个参数,在其他地方我有传更多的参数。 确认一下,你的测试可以把值传到.aspx页面?
      

  6.   

    aspx页面要设置
    ValidateRequest=false 
      

  7.   

    你好, 全局那边已经是ValidateRequest=false;但是我的是.Net 4.0, 需要设置成<httpRuntime requestValidationMode="2.0"/> 现在可以进一步调试了, 谢谢8楼仁兄的提醒