![](/img/trans.png)
[英]How to fix 'Key already exists Parameter name: Key' error in UltraGrid?
[英]The settings key with code name 'XX' already exists
我試圖在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());
注意事項:
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())
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.