簡體   English   中英

代號為“ XX”的設置鍵已存在

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM