我需要将用户输入的更改存储到特定表中,但在管理用户查看和批准之前不会显示这些更改.虽然这些更改仍处于暂挂状态,但我仍会显示旧版本的数据.存储这些变更等待批准的最佳方法是什么?
我想过几种方法,但无法弄清楚什么是最好的方法.这是一个非常小的网络应用程序.一种方法是使PendingChanges表模仿其他表的模式,然后一旦批准更改,我就可以用信息更新真实表.另一种方法是进行某种记录版本控制,其中我在表中存储多个版本的数据,然后始终使用已标记为已批准的最高版本号来提取记录.这将限制额外表的数量(我需要为多个表执行此操作),但每次我提取一组记录以确保获得正确的记录时,我需要进行额外的处理.
这些方法或其他可能有用的个人经历?
更新:只是为了澄清,在这种特殊情况下,我对历史数据不感兴趣.我只需要某种方式来批准用户在网站上发布之前所做的任何更改.因此,用户将编辑他们的"配置文件",然后管理员将查看该修改并批准它.一旦获得批准,这将成为显示的值,并且不需要保留旧版本.
是否有人尝试过以下解决方案,您可以在任何需要在特殊PendingChanges表中将其作为XML跟踪的表中存储挂起的更改?每个记录都有一个列,表示更改所针对的表,可能存储将要更改的记录的id的列(如果是新记录则为null),更改时存储的日期时间列,以及用于存储已更改记录的xml的列(可以序列化我的数据对象).由于我不需要历史记录,因此在批准更改后,将更新真实表并删除PendingChange记录.
有关该方法的任何想法?
有人可以解释DataReader,DataAdapter,数据集和DataView之间的区别吗?
基本上我遇到的问题是在Safari/Chrome中它改变了我的列的宽度,即使我已经指定了a)表格上的宽度,b)表格布局:固定,以及c)我的第一行上的特定宽度添加填充和边框值时,添加到指定表的宽度.在IE7和Firefox 3中,表格呈现相同.但是在Safari/Chrome中,它决定通过从其他列中获取空间来扩大第二列.
在这个例子在这里,斯科特显示做对的DbContext LINQ查询,并将结果直接绑定到一个GridView,以显示产品列表.他的例子是使用Code First的CTP4版本.
但是,当我尝试使用最新版本的EntityFramework 4.1做同样的事情时,我收到以下错误:
不支持直接绑定到商店查询(DbSet,DbQuery,DbSqlQuery)的数据.而是使用数据填充DbSet,例如通过在DbSet上调用Load,然后绑定到本地数据.
我看到DBQuery对象在IListSource.GetList()的实现中故意抛出此错误,IListSource.GetList()用于数据绑定.
为什么他的例子有效?顺便说一句,我知道我可以通过投入一个来完成这项工作projects.ToList().我的主要问题是发布版本中的某些内容是否发生了变化,导致此类内容不再起作用,或者我是否遗漏某些可以解决此错误的内容.
仅供参考,我指的是这样的代码:
MyDbContext db = new MyDbContext();
var projects = from p in db.Projects
where p.AnotherField == 2
select p;
grdTest.DataSource = projects;
grdTest.DataBind();
Run Code Online (Sandbox Code Playgroud) c# asp.net data-binding exception-handling entity-framework-4.1
我有TextBox来取消用户的评论,评论会被保存到XML文件中,问题是我写文字时输入密钥(新行)它会以正确的方式保存到xml中这样
<comment>
sdagsg
fag
fdhfdhgf
</comment>
Run Code Online (Sandbox Code Playgroud)
但是当我从xml读取时看起来像这样的"sdagsg fag fdhfdhgf"
string strXstFile = Server.MapPath(@"~/TopicAndComments.xsl");
XslCompiledTransform x = new XslCompiledTransform();
// Load the XML
XPathDocument doc = new XPathDocument(Server.MapPath(@"~/TopicAndComments.xml"));
// Load the style sheet.
XslCompiledTransform xslt = new XslCompiledTransform();
xslt.Load(strXstFile);
MemoryStream ms = new MemoryStream();
XmlTextWriter writer = new XmlTextWriter(ms, Encoding.ASCII);
StreamReader rd = new StreamReader(ms);
//Pass Topic ID to XSL file
XsltArgumentList xslArg = new XsltArgumentList();
xslArg.AddParam("TopicID", "", HiddenField_SelectedTopicID.Value.ToString());
xslt.Transform(doc, xslArg, writer);
ms.Position = 0;
strHtml = rd.ReadToEnd();
rd.Close();
ms.Close();
Run Code Online (Sandbox Code Playgroud) 我有一个HttpHandler(也作为ASPX页面完成此操作),它检索存储在数据库中的图像并将其写入响应.我已经在代码中添加了以下行,以尝试在浏览器中缓存图像,但每当我查看Firebug中的响应时,它总是具有"私有"的缓存控制头值.
Response.Cache.SetCacheability(HttpCacheability.Public)
Run Code Online (Sandbox Code Playgroud)
我尝试了各种各样的事情,比如使用Response.ClearHeaders和Response.AddHeader()来手动添加"Cache-Control"标头值,但无济于事.有任何想法吗?
编辑:
更多信息:这是在HTTP处理程序(.ashx)中运行,我已经在我的本地IIS 5.1和托管网站上测试了它,我认为是IIS 6.
我正在使用 .NET 中的 MPXJ 库来解析 MS Project (MPP) 文件,而且效果很好。我遇到的一个问题是尝试将任务开始和完成日期转换为 .NET DateTime 以与我的数据模型一起使用。
我正在完成所有任务并调用 task.getFinish() 和 task.getStart() ,它们都返回 javva.util.Date 对象。
当我使用 task.getFinish().getYear()、task.getFinish().getMonth() 等来构建新的 DateTime 对象时,它会警告我它们已过时。
将开始和结束日期从 MPXJ 获取到 .NET DateTime 对象的最佳方法是什么?
谢谢。