我会打开数据库并查看cmsDataTypePreValues 表中的值。我怀疑 uSync 已经改变了你下面的预置值。预值确实很棘手,uSync 在这种情况下会尽力而为。您会注意到 Umbraco 7 中的 uSync .def 文件不会在这些预值上记录任何唯一 ID。它们只是被插入数据库并自动分配一个 id。这意味着如果预值被删除并重新创建,它们将具有不同的 id。如果cmsDataTypePreValues 记录上的id 字段选择了这些下拉预值,则可能是出了问题。
使用以下查询查看数据类型的预值:
DECLARE @dataTypeNodeId AS INT = <dataTypeNodeId, INT, 0>
SELECT *
FROM cmsDataType dt
INNER JOIN cmsDataTypePreValues pv
ON pv.datatypeNodeId = dt.nodeId
WHERE dt.nodeId = @dataTypeNodeId
比较您在此处看到的开发数据库和生产数据库的值。为了帮助您更好地了解数据的外观,您还可以运行此查询以查看实际选取的值的外观。查询很长,因为它过滤掉了旧版本的结果。这可能对您不太有效,因为您的数据类型位于 Archetype 内部。希望它仍然可以让您了解所选下拉值在数据库中的实际外观。
DECLARE @dataTypeNodeId AS INT = <dataTypeNodeId, INT, 0>
SELECT TOP 1000 n.id
,n.[text]
,n.[path]
,pt.[alias] AS 'property alias'
,dtn.id AS 'Datatype Id'
,dtn.[text] AS 'Datatype Name'
,dtn.uniqueID AS 'Datatype Guid'
,d.templateId
,t.[alias] AS 'template alias'
,pd.dataInt
,pd.dataDate
,pd.DataNvarchar
,pd.dataNtext
,cv.VersionDate
FROM umbracoNode n
INNER JOIN cmsDocument d
ON d.nodeId = n.id
INNER JOIN cmsContentVersion cv
ON cv.VersionId = d.versionId
INNER JOIN cmsPropertyData pd
ON pd.contentNodeId = n.id AND pd.versionId = d.versionId
INNER JOIN cmsPropertyType pt
ON pt.id = pd.propertytypeid
INNER JOIN cmsDataType dt
ON dt.nodeId = pt.dataTypeId
INNER JOIN umbracoNode dtn
ON dtn.id = dt.nodeId
LEFT OUTER JOIN cmsTemplate t
ON t.nodeId = d.templateId
WHERE d.newest = 1
AND dtn.id = @dataTypeNodeId
您可以尝试手动修复数据库中的预值条目。我在使用 Umbraco 下拉菜单时遇到了足够多的预值问题,因此我尝试始终使用 nuPickers 之类的东西来避免按 id 选择预值。