0

我正在尝试在 Kentico 中保存设置,但出现此错误:

代号为“AvalaraOrderStatus”的设置键已存在。

我已经创建了设置,并为它保存了一个值。该代码在 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());
4

1 回答 1

1

需要注意的几点:

  • SettingsKeyInfoProvider.GetSettingsKeyInfo方法的第一个参数不需要以站点名称为前缀。这就是提供站点标识符的原因(在您的情况下为SiteID)。否则,您可能会在null每次if语句评估时获得一个值,这就是即使设置键存在也会重新创建的原因。所以应该是:
    SettingsKeyInfoProvider.GetSettingsKeyInfo("AvalaraOrderStatus", siteID)
  • 这同样适用于该SettingsKeyInfoProvider.SetValue方法 - 无需为站点名称添加前缀:
    SettingsKeyInfoProvider.SetValue("AvalaraOrderStatus", siteId, orderStatus.Trim())
  • CurrentSiteID整数是有效的 SiteIdentifier,因此无需显式实例化SiteInfoIdentifier对象:
    SettingsKeyInfoProvider.SetValue("AlavaraOrderStatus", CMS.SiteProvider.SiteContext.CurrentSiteID, orderStatus.Trim())
于 2016-07-24T22:45:08.433 回答