C# 未保存字段值更改
我试图从后端动态更改字段值,但看起来更改没有保存 代码C# 未保存字段值更改,c#,sitecore,editing,C#,Sitecore,Editing,我试图从后端动态更改字段值,但看起来更改没有保存 代码 项从主数据库获取 using (new EditContext(item)) { item.Editing.BeginEdit(); try { //Value is updated here from "" to Test item.Fields["Content"].Value = "Test"; }
项
从主数据库获取
using (new EditContext(item))
{
item.Editing.BeginEdit();
try
{
//Value is updated here from "" to Test
item.Fields["Content"].Value = "Test";
}
finally
{
//item.Fields["Content"].Value is "" again.
item.Editing.AcceptChanges();
item.Editing.EndEdit();
}
}
更新
正如@sitecore-climper所说,我确实将代码改回了原来的版本-
新建Sitecore.SecurityModel.SecurityDisabler()
但是,问题是缓存。只有在我清除缓存并重新启动浏览器后,更新后的值才会显示在内容编辑器中
为了解决这个问题,我在编辑之前禁用了缓存,并在编辑完成后将其重新打开
CacheManager.Enabled = false;
using (new Sitecore.SecurityModel.SecurityDisabler())
{
item.Editing.BeginEdit();
try
{
item.Fields["Content"].Value = "Test";
}
finally
{
item.Editing.EndEdit();
}
}
CacheManager.Enabled = true;
请添加:(新建Sitecore.SecurityModel.SecurityDisabler())
EditContext包含以下代码行:
public EditContext(Item item)
{
Assert.ArgumentNotNull((object) item, "item");
this._item = item;
this._item.Editing.BeginEdit();
}
因此,如果代码中有
item.Editing.BeginEdit()
您的代码必须是:
using (new Sitecore.SecurityModel.SecurityDisabler())
{
item.Editing.BeginEdit();
try
{
//Value is updated here from "" to Test
item.Fields["Content"].Value = "Test";
}
finally
{
//item.Fields["Content"].Value is "" again.
// Remove AcceptChanges I never use it , for editing .
// item.Editing.AcceptChanges();
item.Editing.EndEdit();
}
}
我更新了我的答案,您是否检查了内容编辑器是否有任何更改?
您能清除缓存,然后再次检查吗。这真的很奇怪为什么不工作,我想可能是一个缓存问题 如果有帮助,请尝试使用SecurityDisabler
using (new Sitecore.SecurityModel.SecurityDisabler())
{
item.Editing.BeginEdit();
try
{
//Value is updated here from "" to Test
item.Fields["Content"].Value = "Test";
}
finally
{
//item.Fields["Content"].Value is "" again.
item.Editing.AcceptChanges();
item.Editing.EndEdit();
}
}
更改是否提交到您期望的数据库?尝试切换到Web/Master以查看是否存在更改。我仅尝试更改Master数据库。切换也不起作用。您是否尝试过在没有try/finally的情况下将所有内容都放在try{}或测试中?也许那些示波器把事情弄糟了,我也有同样的问题。禁用缓存并没有帮助,我忘了补充一点,我实际上也尝试过。而且,它也不起作用。它会丢失AcceptChanges()或EndEdit()上的值。缓存的设置是正确的。当我清除缓存并重新启动站点时,我可以在内容编辑器中看到更新的值。你知道如何在不清除缓存的情况下强制更新CE中的值吗?我实际上是通过在编辑之前禁用缓存,然后在编辑完成后启用缓存来实现的。谢谢。@NomadTraveler您是如何在编辑过程中禁用缓存的?@MikkelNielsen我已经用有效的解决方案更新了我的问题。检查“更新”部分