void submit_button_Click(object sender, EventArgs e) { string strError = ""; TextBox textbox = (TextBox)this.FindControl("displayName"); OpacApplication app = (OpacApplication)this.Page.Application["app"]; if (app == null) { strError = "app == null"; goto ERROR1; } SessionInfo sessioninfo = (SessionInfo)this.Page.Session["sessioninfo"]; if (sessioninfo == null) { strError = "sessioninfo == null"; goto ERROR1; } int nRedoCount = 0; bool bUploadSaved = false; REDO: XmlDocument readerdom = null; // 获得当前session中已经登录的读者记录DOM // return: // -2 当前登录的用户不是reader类型 // -1 出错 // 0 尚未登录 // 1 成功 int nRet = sessioninfo.GetLoginReaderDom( out readerdom, out strError); if (nRet == -1 || nRet == -2) { goto ERROR1; } if (nRet == 0) { goto ERROR1; } bool bXmlRecordChanged = false; FileUpload upload = (FileUpload)this.FindControl("upload"); string strOldDisplayName = DomUtil.GetElementText(readerdom.DocumentElement, "displayName"); if (textbox.Text == strOldDisplayName && upload.HasFile == false) { strError = "显示名没有发生修改并且也没有新上传头像,放弃保存"; goto ERROR1; } if (strOldDisplayName != textbox.Text) { DomUtil.SetElementText(readerdom.DocumentElement, "displayName", textbox.Text); bXmlRecordChanged = true; } // 如果有上传头像 if (upload.HasFile == true && bUploadSaved == false) { XmlNamespaceManager nsmgr = new XmlNamespaceManager(new NameTable()); nsmgr.AddNamespace("dprms", DpNs.dprms); // 全部<dprms:file>元素 XmlNodeList nodes = sessioninfo.ReaderInfo.ReaderDom .DocumentElement.SelectNodes("//dprms:file[@usage='photo']", nsmgr); string strResTimeStamp = ""; string strFileID = "0"; if (nodes.Count > 0) { strFileID = DomUtil.GetAttr(nodes[0], "id"); if (String.IsNullOrEmpty(strFileID) == true) { strFileID = FindNewFileID(sessioninfo.ReaderInfo.ReaderDom); } strResTimeStamp = DomUtil.GetAttr(nodes[0], "__timestamp"); } else { strFileID = FindNewFileID(sessioninfo.ReaderInfo.ReaderDom); XmlNode node = sessioninfo.ReaderInfo.ReaderDom.CreateElement( "dprms:file", DpNs.dprms); sessioninfo.ReaderInfo.ReaderDom.DocumentElement.AppendChild(node); DomUtil.SetAttr(node, "id", strFileID); DomUtil.SetAttr(node, "usage", "photo"); bXmlRecordChanged = true; } if (bXmlRecordChanged == true) { sessioninfo.SetLoginReaderDomChanged(); // 先要保存一次XML记录,这样才有<dprms:file>元素,为上载资源作好准备 // return: // -2 时间戳冲突 // -1 error // 0 没有必要保存(changed标志为false) // 1 成功保存 nRet = sessioninfo.SaveLoginReaderDom( out strError); if (nRet == -1) { goto ERROR1; } if (nRet == -2) { if (nRedoCount < 10) { nRedoCount++; sessioninfo.ReaderInfo.ReaderDom = null; // 强迫重新读入 goto REDO; } goto ERROR1; } bXmlRecordChanged = false; } // Stream stream = upload.FileContent; // 保存资源 // 采用了代理帐户 // return: // -1 error // 0 发现上载的文件其实为空,不必保存了 // 1 已经保存 nRet = app.SaveUploadFile( this.Page, sessioninfo.ReaderInfo.ReaderDomPath, strFileID, strResTimeStamp, upload.PostedFile, 64, 64, out strError); if (nRet == -1) { goto ERROR1; } bUploadSaved = true; sessioninfo.ReaderInfo.ReaderDom = null; // 迫使重新装载 // 因为上载后时间戳改变,需要重新获取 nRet = sessioninfo.GetLoginReaderDom( out readerdom, out strError); if (nRet == -1 || nRet == -2) { goto ERROR1; } } // 为显示名的修改而保存 if (bXmlRecordChanged == true) { sessioninfo.SetLoginReaderDomChanged(); // return: // -2 时间戳冲突 // -1 error // 0 没有必要保存(changed标志为false) // 1 成功保存 nRet = sessioninfo.SaveLoginReaderDom( out strError); if (nRet == -1) { goto ERROR1; } if (nRet == -2) { if (nRedoCount < 10) { nRedoCount++; sessioninfo.ReaderInfo.ReaderDom = null; // 强迫重新读入 goto REDO; } goto ERROR1; } bXmlRecordChanged = false; } // 刷新显示 return; ERROR1: this.SetDebugInfo("errorinfo", strError); }