C# Umbraco 7.1.4媒体管理器,删除后存在Id

C# Umbraco 7.1.4媒体管理器,删除后存在Id,c#,visual-studio-2012,.net-4.5,umbraco,C#,Visual Studio 2012,.net 4.5,Umbraco,我使用的是visual studio 2012、C#/net 4.5、Umbraco 7.1.4 媒体文件夹有问题 我通过CMS删除了媒体文件夹中的图像和文件夹 然而,当我这样做的时候,内容页面仍然在尝试查找和使用这些图像 因此,我删除了所有媒体选择器的所有链接 仍然有问题,所以我检查了我的代码,它仍然在寻找文件 所以这一次,我环顾四周,从回收站中取出。还在找身份证 然后我在Windows资源管理器上查看文件夹本身,所有文件都在那里……奇怪。所以我把它们都删除了。你猜怎么着?仍在努力寻找媒体。

我使用的是visual studio 2012、C#/net 4.5、Umbraco 7.1.4

媒体文件夹有问题

我通过CMS删除了媒体文件夹中的图像和文件夹

然而,当我这样做的时候,内容页面仍然在尝试查找和使用这些图像

因此,我删除了所有媒体选择器的所有链接

仍然有问题,所以我检查了我的代码,它仍然在寻找文件

所以这一次,我环顾四周,从回收站中取出。还在找身份证

然后我在Windows资源管理器上查看文件夹本身,所有文件都在那里……奇怪。所以我把它们都删除了。你猜怎么着?仍在努力寻找媒体。 我检查了我的解决方案浏览器,是的,你猜它还在那里!所以我也从那里删除了它

因此,删除了所有媒体文件,删除了所有引用,删除了文件夹中的所有图像

应该没有参考资料,没有图像

但是你猜怎么着,我一步一步地看了下面的代码,在翁布拉科的某个地方,它仍然有图像的ID

@if (Model.Content.GetPropertyValue("logo") != null)
{
    var mediaItem = Umbraco.TypedMedia(Model.Content.GetPropertyValue("logo", true));
    <img class="img-logo" src="@mediaItem.GetPropertyValue("umbracoFile")" width="100" height="50" alt=""/>
}
原来是

@if (Model.Content.HasValue("logo"))

好的,经过几个小时的头部撞击,终于明白了

原来,当你“保存并发布”的时候,那个绿色的小按钮实际上并没有发布

对媒体文件夹进行更改实际上不能正常工作,而且似乎不同步(不要引用我的话,只是一个观察)

解决问题的唯一方法是“发布”内容,单击您的内容页面,右上角的操作,应该是“发布”或“重新发布”选项,单击该选项并发布您的内容这似乎实际上解决了问题

我相信这是DB和缓存不同步的问题,而只是在适当的内容发布上同步


希望这将在未来的文档中解释,因为这对开发人员来说是一个巨大的时间消耗。希望这对大家有帮助

这可能有点让人困惑,但我可以在这里帮助您

保存图像时,图像的发布方式与内容的发布方式不同。有关写入数据库的图像的信息,也可以通过检查进行索引。UI对图像的任何请求都会命中检查索引,而不是数据库和XML缓存

在CMS中删除映像(随后从回收站中删除)时,物理映像将保留在文件系统中,但记录将从数据库中删除。它也将从检查索引中删除

但是,当内容引用图像时,该引用会记录在数据库中,如果已发布,则会记录在站点XML缓存中。如果您随后从CMS中删除该图像,内容仍将引用该图像,正如您自己看到的那样,无法找到它。如果取消引用该图像,则仍然必须发布内容以从XML缓存中删除引用

在这种情况下,最好的方法是先取消引用图像,重新发布内容,然后删除图像

对于删除后仍在Visual Studio中显示的文件,这是因为.csproj文件保留了对这些文件的引用。如果从操作系统中删除文件,则不会从.csproj文件中删除文件引用。同样,最佳实践是从VisualStudio中删除项目


希望这有帮助。我知道这似乎是Umbraco的一个问题,但你所经历的一切实际上都是你应该经历的。

除了@digbyswift(+1)的出色回答之外,还有一些补充

Umbraco偶尔会引用回收站中的ID,因此有时“出现”的已删除节点也会出现在回收站中-因此定期清空回收站确实有一个目的&将加快代码中的节点遍历

如果您使用imagegen(大多数人都使用图像),则在呈现媒体图像时,imagegen会创建文件的缓存版本-这可能包含在一个维度中引用的图像的旧版本的旧缓存版本(但不是后续版本)。如果正在整理,您可以安全地删除任何不确定的缓存文件夹


如果在您取消对内容页中的图像的引用后,删除umbraco.config文件,umbraco将重建该文件&您可以确定任何恶意ID都将在重建过程中丢失。

哇,好吧,现在理解它非常感谢,尽管我觉得仅仅删除一个图像有点混乱和冗长。真奇怪,但至少它终于起作用了。
@if (Model.Content.HasValue("logo"))