代号为 'XX' 的设置密钥已存在
The settings key with code name 'XX' already exists
我正在尝试在 Kentico 中保存设置,但出现此错误:
The settings key with code name 'AvalaraOrderStatus' already exists.
我已经创建了设置并为其保存了一个值。该代码在 Kentico 8 中运行良好,但我被要求没有 SiteInfiIdentifer。
这是我为进行设置而创建的代码:
//if the setting does not exist, then create it
if (SettingsKeyInfoProvider.GetSettingsKeyInfo(siteName + ".AvalaraOrderStatus", siteID) == null)
{
// Create and set up new SettingsKey
SettingsKeyInfo si = new SettingsKeyInfo();
si.KeyName = "AvalaraOrderStatus";
si.KeyDisplayName = "Avalara Order Status";
si.KeyDescription = "Avalara order status for this site";
si.KeyType = "string";
si.KeyValue = string.Empty;
si.KeyCategoryID = category.CategoryID;
SettingsKeyInfoProvider.SetSettingsKeyInfo(si);
}
代码在最后一行抛出错误。这是我的代码:
int currentSiteID = CMS.SiteProvider.SiteContext.CurrentSiteID;
SiteInfoIdentifier siteId = new SiteInfoIdentifier(currentSiteID);
//update settings in system
SettingsKeyInfoProvider.SetValue(siteName + ".AvalaraOrderStatus", siteId, orderStatus.Trim());
注意几点:
SettingsKeyInfoProvider.GetSettingsKeyInfo
方法的第一个参数不需要以网站名称为前缀。这就是提供站点标识符的原因(在您的情况下为 SiteID
)。否则,您可能会在每次 if
语句求值时得到一个 null
值,这就是设置键被重新创建的原因,即使它存在。所以应该是:
SettingsKeyInfoProvider.GetSettingsKeyInfo("AvalaraOrderStatus", siteID)
- 同样适用于
SettingsKeyInfoProvider.SetValue
方法 - 无需为站点名称添加前缀:
SettingsKeyInfoProvider.SetValue("AvalaraOrderStatus", siteId, orderStatus.Trim())
CurrentSiteID
整数是有效的 SiteIdentifier,因此无需显式实例化 SiteInfoIdentifier
对象:
SettingsKeyInfoProvider.SetValue("AlavaraOrderStatus", CMS.SiteProvider.SiteContext.CurrentSiteID, orderStatus.Trim())
我正在尝试在 Kentico 中保存设置,但出现此错误:
The settings key with code name 'AvalaraOrderStatus' already exists.
我已经创建了设置并为其保存了一个值。该代码在 Kentico 8 中运行良好,但我被要求没有 SiteInfiIdentifer。
这是我为进行设置而创建的代码:
//if the setting does not exist, then create it
if (SettingsKeyInfoProvider.GetSettingsKeyInfo(siteName + ".AvalaraOrderStatus", siteID) == null)
{
// Create and set up new SettingsKey
SettingsKeyInfo si = new SettingsKeyInfo();
si.KeyName = "AvalaraOrderStatus";
si.KeyDisplayName = "Avalara Order Status";
si.KeyDescription = "Avalara order status for this site";
si.KeyType = "string";
si.KeyValue = string.Empty;
si.KeyCategoryID = category.CategoryID;
SettingsKeyInfoProvider.SetSettingsKeyInfo(si);
}
代码在最后一行抛出错误。这是我的代码:
int currentSiteID = CMS.SiteProvider.SiteContext.CurrentSiteID;
SiteInfoIdentifier siteId = new SiteInfoIdentifier(currentSiteID);
//update settings in system
SettingsKeyInfoProvider.SetValue(siteName + ".AvalaraOrderStatus", siteId, orderStatus.Trim());
注意几点:
SettingsKeyInfoProvider.GetSettingsKeyInfo
方法的第一个参数不需要以网站名称为前缀。这就是提供站点标识符的原因(在您的情况下为SiteID
)。否则,您可能会在每次if
语句求值时得到一个null
值,这就是设置键被重新创建的原因,即使它存在。所以应该是:
SettingsKeyInfoProvider.GetSettingsKeyInfo("AvalaraOrderStatus", siteID)
- 同样适用于
SettingsKeyInfoProvider.SetValue
方法 - 无需为站点名称添加前缀:
SettingsKeyInfoProvider.SetValue("AvalaraOrderStatus", siteId, orderStatus.Trim())
CurrentSiteID
整数是有效的 SiteIdentifier,因此无需显式实例化SiteInfoIdentifier
对象:
SettingsKeyInfoProvider.SetValue("AlavaraOrderStatus", CMS.SiteProvider.SiteContext.CurrentSiteID, orderStatus.Trim())