none
Java Script调用C#页面未能成功保存数据 RRS feed

  • 问题

  • 各位专家,

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

    2012年9月12日 15:31

答案

  • 其实用字符串传就好了,比如http://www.baidu.com/aaa.aspx?id=1&sss=1

    你直接用Request.QueryString["id"] Request.QueryString["sss"]  就能取到值了..

    现在也很少用xml直接来写了 一般也用json  也不用自己写的方法 因为你那样写的话 浏览器会出现不兼容的

    建议用封装好的jquery,extjs之类的组件..


    认真的活,认真的爱!

    2012年9月16日 15:03
    版主

全部回复

  • 有没有哪位大虾能帮助解决的? 期待中。。。

    2012年9月14日 14:24
  • 你用普通字符串可以的话? 那有什么问题呢? 没看明白?


    认真的活,认真的爱!

    2012年9月15日 10:44
    版主
  • 你好,就是传输值给save.aspx时通过普通的字符串方式(把Name和Password值简单合并成一字符串,在save.aspx页面处理时再拆开取值),而不是通过XML格式的方式。
    2012年9月15日 10:55
  • 但是通过XML格式传输值时就出现如上描述的问题

    2012年9月15日 10:56
  •  补充一下,调试时好像XML格式的数据传不到save.aspx里面,系统没有报错,尝试在save.aspx里面设了一些断点,但是在运行的过程中调试器就根本没运行到save.aspx里面所设的断点;相反地,若用普通字符串的格式传输数据给save.aspx, 一切正常, 调试时调试器也可运行到save.aspx里面所设的断点

    期待着大虾们的帮助......

    2012年9月15日 14:05
  • 其实用字符串传就好了,比如http://www.baidu.com/aaa.aspx?id=1&sss=1

    你直接用Request.QueryString["id"] Request.QueryString["sss"]  就能取到值了..

    现在也很少用xml直接来写了 一般也用json  也不用自己写的方法 因为你那样写的话 浏览器会出现不兼容的

    建议用封装好的jquery,extjs之类的组件..


    认真的活,认真的爱!

    2012年9月16日 15:03
    版主
  • 谢谢! 确实会出现浏览器不兼容的情况;上面出现问题的原因是validateRequest(或者requestValidationMode/.Net 4.0)的属性值导致的

    2012年9月22日 13:13