• XmlHttp在DoNet中的完全应用前/后台完成分离篇(ZT)


    对于XmlHttp的介绍见http://www.cnblogs.com/helimin19/archive/2004/12/03/72519.aspx

    本文主要实现了在donet中,前台界面与后台程序完成分离,以达到互不影响的效果,从而降低了前台后台之前的偶合度。(当然这种效果也只是相对的),就果我下面举的例子来说吧,会员注册和修改会员资料是在一个页面上显示。注册可以达到完成分离(后台程序可以完全不知道前台界面是什么样子的,也不需要知道前面界面窗体中包括哪些内容,即不需要知道前台将要传些什么值给我),但修改会员数据,就需要前台传个用户名来过,从而显示指定的用户信息。如果你采用其Cookies等用户级的变量来传的话,当然就可以达到完成分离的效果了。


    1。xmlHttp.js---用於處於客戶端的XMLHTTP數據

    //將所有的客戶端表單數據生成XML文件
    function GetAllFormData()
    {
        
    var strXML = "<Client>\r\n<FormData>\r\n";
        
    for(var i=0;i<=document.forms(0).item.length;i++)
        {
            strXML 
    += "<" + document.forms(0).item(i).name + ">";
            strXML 
    += document.forms(0).item(i).value;
            strXML 
    += "</" + document.forms(0).item(i).name + ">\r\n";
        }
        strXML 
    += "</FormData>\r\n</Client>"
        
    return strXML;
    }

    ///向服務器發送XML文檔
    function Send(Str,URL) 
    {
        
    var Http = new ActiveXObject("Microsoft.XMLHTTP")
        Http.open(
    "POST",URL,false)
        Http.send(Str)
        
    return Http.responseText;
    }

    ///獲得XML中指定的節點的值
    function GetXMLNodeValue(strXML,nodeName)
    {
        
    var Dom = new ActiveXObject("Microsoft.XMLDOM")
        Dom.async
    =false 
        Dom.loadXML(strXML)
        
    if(Dom.parseError.errorCode != 0
        {
            
    delete(Dom)
            
    return(false)
        }
        
    else
        {
            
    var node = Dom.documentElement.selectSingleNode("//"+nodeName);
            
    if(node)
                nodeValue 
    = node.text;
            
    delete(Dom)
            
    return(nodeValue);
        }
    }

    2. tesaspx.htm---客戶端文件(即注冊修改會員資料頁面)
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
    <HTML>
        
    <HEAD>
            
    <title>NewUser</title>
            
    <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
            
    <meta content="C#" name="CODE_LANGUAGE">
            
    <meta content="JavaScript" name="vs_defaultClientScript">
            
    <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
            
    <script language="javascript" src="xmlHttp.js"></script>
            
    <script language=javascript>
            
    <!--
                ///本頁的測試用例
                function Test()
                {
                    var tmp 
    = Send(GetAllFormData(),"./test.aspx");
                    
    document.Form1.UserName.value  = GetXMLNodeValue(tmp,"UserName");
                    
    document.Form1.PassWord.value  = GetXMLNodeValue(tmp,"PassWord");
                    
    document.Form1.EMail.value  = GetXMLNodeValue(tmp,"EMail");
                    
    document.Form1.Question.value  = GetXMLNodeValue(tmp,"Question");
                    
    document.Form1.Answer.value  = GetXMLNodeValue(tmp,"Answer");
                
    }
            //--
    >
            
    </script>
        
    </HEAD>
        
    <body MS_POSITIONING="GridLayout" >
            
    <form id="Form1" method="post" name="Form1">
                
    <FONT face="新細明體">
                    
    <DIV style="Z-INDEX: 102; LEFT: 192px; WIDTH: 288px; POSITION: absolute; TOP: 64px; HEIGHT: 200px"
                        ms_positioning
    ="FlowLayout">
                        
    <DIV>用戶名:<INPUT id="UserName" type="text" name="UserName"></DIV>
                        
    <DIV>密碼:<INPUT id="PassWord" type="password" name="PassWord" ></DIV>
                        
    <div id="HidPass" runat="server" ms_positioning="FlowLayout">
                            確認密碼:
    <INPUT id="ConPassWord" type="password" name="ConPassWord">
                        
    </div>
                        
    <DIV>EMail:<INPUT id="EMail" type="text" name="EMail"></DIV>
                        
    <DIV>密碼提示語:<INPUT id="Question" type="text" name="Question" ></DIV>
                        
    <DIV>密碼答案:<INPUT id="Answer" type="text" name="Answer" ></DIV>
                        
    <DIV id="HidSafeCode" runat="server">
                            驗證碼:
    <INPUT id="CheckCode" type="text" name="CheckCode" ><IMG src="SafeCode.aspx" border="0">
                        
    </DIV>
                        
    <INPUT type="reset" value="Reset" name="reset">
                        
    <INPUT id="Button3" type="button" value="XML" name="Button3" onclick="Test();" >
                    
    </DIV>
                
    </FONT>
            
    </form>
        
    </body>
    </HTML>

    3.xmlHttp.cs---重載Page類(操作客戶端以XmlHttp發過的請求)
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Xml;
    using System.IO;
    using System.Collections.Specialized;

    namespace Model.Code
    {
        
    /// <summary>
        
    /// xmlHttp---對XmlHttp的操作(繼承自OverridePage類,表示其子類都是對XmlHttp發送過來的數據進行操作)
        
    /// 冷風.net,2005/03/26
        
    /// </summary>

        public class XmlHttp : OverridePage
        
    {
            
    public XmlHttp(){}

            
    /// <summary>
            
    /// 生成XmlDocument對象
            
    /// 作者:冷風,net,2005/03/26
            
    /// </summary>
            
    /// <param name="stream">xml格式的內存塊</param>
            
    /// <returns>XmlDocument對象</returns>

            protected System.Xml.XmlDocument CreateXmlDocument(System.IO.Stream stream)
            
    {
                System.Xml.XmlDocument doc 
    = new XmlDocument();
                
    try
                
    {
                    doc.Load(stream);
                }

                
    catch
                
    {
                    
    byte[] buffer = new byte[stream.Length];
                    stream.Read(buffer,
    0,buffer.Length);
                    
    string strXML = System.Text.UnicodeEncoding.Default.GetString(buffer,0,buffer.Length);
                    doc.LoadXml(strXML);
                }

                
    return doc;
            }


            
    /// <summary>
            
    /// 獲得XmlNode中第一個指定的節點的文本值
            
    /// 作者:冷風,net,2005/03/26
            
    /// </summary>
            
    /// <param name="node">XmlNode對象</param>
            
    /// <param name="nodeName">要搜索的節點名稱</param>
            
    /// <returns>節點的值</returns>

            protected string GetXMLNodeValue(XmlNode node,string nodeName)
            
    {
                XmlNode subNode 
    = node.SelectSingleNode("//"+nodeName);
                
    return subNode.InnerText;
            }


            
    /// <summary>
            
    /// 將XmlNode對象轉化為NameValueCollection對象
            
    /// 作者:冷風,net,2005/03/26
            
    /// </summary>
            
    /// <param name="node">XmlNode對象</param>
            
    /// <returns>NameValueCollection對象</returns>

            protected NameValueCollection CreateNameValueCollectionFromXML(XmlNode node)
            
    {
                NameValueCollection nvc 
    = new NameValueCollection();
                
    for(int i=0;i<node.ChildNodes.Count;i++)
                
    {
                    nvc.Add(node.ChildNodes[i].Name,node.ChildNodes[i].InnerText);
                }

                
    return nvc;
            }


            
    /// <summary>
            
    ///    為了不返回不必要的數據,必須重載Render方法
            
    ///    作者:冷風,net,2005/03/26
            
    /// </summary>
            
    /// <param name="writer">輸出參數</param>

            protected override void Render(HtmlTextWriter writer)
            
    {
            }

        }

    }


    4.test.aspx---對應的tesaspx.htm的請求文件
    using System;
    using System.Collections;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.SessionState;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Xml;
    using System.IO;
    using System.Collections.Specialized;

    namespace Model.VIP
    {
        
    /// <summary>
        
    /// test 的摘要描述。
        
    /// </summary>

        public class test : Code.XmlHttp
        
    {
            
    private string m_strXml="";
            
    private void Page_Load(object sender, System.EventArgs e)
            
    {    
                XmlDocument doc 
    = this.CreateXmlDocument(this.Request.InputStream);
                
    string userName = GetXMLNodeValue(doc.DocumentElement,"UserName");
                DataSet ds 
    = Code.Users.GetUserInfo(userName);
                
    //如果存在數值則表明是修改會員信息,否則為新增加
                if(ds!=null && ds.Tables[0].Rows.Count>0)
                
    {
                    m_strXml 
    = ds.GetXml();
                }

                
    else
                
    {
                    NameValueCollection userInfo 
    = this.CreateNameValueCollectionFromXML(doc.DocumentElement.FirstChild);
                    
    string returnValue = Code.Users.AddUser(userInfo);
                    
    if(returnValue=="OK")
                    
    {
                        m_strXml 
    ="注冊成功!";
                    }

                    
    else
                    
    {
                        m_strXml 
    = "注冊失敗 !";
                    }

                }

                Response.Write(m_strXml);
            }


            
    Web Form 設計工具產生的程式碼
        }

    }
  • 相关阅读:
    操作系统-存储管理(6)buffer/cache/swap
    RTMP推流摄像机搭配EasyDSS流媒体直播方案,适用场景幼儿园/明厨亮灶/商超水利等
    企业远程办公视频会议系统EasyRTC-SFU下侧边栏边框超限问题如何解决?
    TSINGSEE青犀视频流媒体音视频系列产品解决方案(汇总篇)
    Easy系列开源与免费流媒体音视频方案汇总(持续更新)
    TSINGSEE青犀视频Easy系列视频平台是如何输出HLS流的?HLS协议详解
    为什么RTMP视频推流网关EasyRTMPLive,拉流至EasyDSS视频平台却失败了?
    视频监控系统搭建为什么要使用流媒体服务器做视频分发?
    网页无插件视频流媒体播放器EasyPlayerPro-IOS版如何解决有声音无画面的问题?
    网页视频流媒体播放器EasyPlayer.JS开发web H5网页播放H.265视频支持FLV与HLS直播与点播
  • 原文地址:https://www.cnblogs.com/nosnowwolf/p/535816.html
Copyright © 2020-2023  润新知