我试图在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());发布于 2016-07-24 22:45:08
有几件事要注意:
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())https://stackoverflow.com/questions/38557333
复制相似问题