我将页面id组件id和模板id作为查询字符串传递给aspx页面,并使用此java脚本:
var masterTabControl = $controls.getControl($("#MasterTabControl"),
"Tridion.Controls.TabControl");
p.compPresTab = masterTabControl.getPage("ComponentPresentationsTab");
p.selectedComponentPresentation = p.compPresTab.getSelectedComponentPresentation();
p.selectedComp = p.selectedComponentPresentation.getComponentId();
window.open("http://" + location.hostname + ":path/test.aspx?pgId=" + pageId +
"&comId=" + p.selectedComponentPresentation.getComponentId() +
"&comTmpId=" +
p.selectedComponentPresentation.getComponentTemplateId(),
"myWindow", "status = 1,
toolbar=no,width=300,height=200,resizable=no,scrollbars=yes");
现在在test.aspx页面上,我正在读取id并从用户那里获得一些额外信息,我将其保存到文本文件中。
在按钮上单击弹出的test.aspx页面,我将其保存在文本文件中:
sLogDetails = PageId + "| " + ComponentId + "|" + ComponentTemplateId +
"|" + text ;
//Move the contents to the temp file other than the existing one.
using (var sr = new StreamReader(permanentFile))
{
using (var sw = new StreamWriter(@"" + tempFile , true))
{
string line;
while ((line = sr.ReadLine()) != null)
{
string[] parts = line.Split('|');
PageId = parts[0].Trim();
ComponentId = parts[1].Trim();
ComponentTemplateId = parts[2].Trim();
//Check there exist same record already
if (SPageId != PageId.Trim() || SComponentId != ComponentId.Trim()
|| SComponentTemplateId != ComponentTemplateId.Trim())
sw.WriteLine(line);
}
//Delete the Permanent file & create permanent file from temporary file
File.Delete(permanentFile);
File.Move(tempFile, permanentFile);
// Insert changes to the Permanent file
using (StreamWriter w = File.AppendText(permanentFile))
{
// Close the writer and underlying file.
w.WriteLine(sLogDetails);
w.Flush();
w.Close();
}
如果id已存在于文本文件中,那么我将在popup test.aspx页面的文本字段中填充它,如:
using (StreamReader r = File.OpenText(strPath + "Log.txt"))
{
string line;
while ((line = r.ReadLine()) != null)
{
// Console.WriteLine(line);
string[] parts = line.Split('|');
PageId=parts[0].Trim();
ComponentId = parts[1].Trim();
ComponentTemplateId = parts[2].Trim();
//If there exist a record populate the data fields
if (SPageId == PageId.Trim() && SComponentId == ComponentId.Trim()
&& SComponentTemplateId == ComponentTemplateId.Trim())
{
txtRuleName.Text = (string)parts[3];
}
}
r.Close();
}
现在我被困在这里了。当它在文本字段中填充时,用户可以在弹出的test.aspx页面中编辑文本区域,单击确定它将保存在文本文件中。如果用户在没有“保存并关闭”的情况下关闭页面窗口,则他在文本字段中所做的更改不应保存在文本文件中。它应该恢复原来的状态。
任何想法我怎么能做到?
答案 0 :(得分:3)
回应“没有发生的事情”是相当困难的。
那么有什么方法可以创建用户可以退出该窗口的其他方式列表吗?使用该列表,您可以注册相关的事件处理程序(或覆盖相关命令)并在那里实现回滚。
或者,您可以考虑从弹出窗口的临时位置对文件进行更改。然后,当用户单击“保存并关闭”时,只将其提交到文本文件。
请注意,当您将Tridion GUI和Content Manager扩展为在多台计算机上运行时,他的基于文件的方法将开始失败。通常,在处理企业级软件时,您应该小心将内容存储在服务器上的文件中。什么是单个服务器(并且将始终是开发环境中的单个服务器)将在未来的某个时间点转变为多个服务器,此时您的解决方案将导致问题。