在 DNN 7.3 + 中更新自定义门户设置

Updating Custom Portal Settings in DNN 7.3 +

我正在接管另一个开发人员的模型并对其进行现代化改造。

他们在模块设置的 settings.ascx 页面中有以下行:

 DotNetNuke.Entities.Portals.PortalSettings.UpdatePortalSetting(this.PortalId, "setting_name", tx_emailfrom.Text);

抛出以下警告

Warning 'PortalSettings.UpdatePortalSetting(int, string, string)' is obsolete: 'Deprecated in DNN 5.0. Replaced by DataProvider.UpdatePortalSetting(Integer, String, String)'

所以我将行更改为:

DotNetNuke.Data.DataProvider.UpdatePortalSetting( this.PortalId, "setting_name", tx_emailfrom.Text, UserId, "en-US");

按照建议但现在我收到以下错误:

Error CS0120 An object reference is required for the non-static field, method, or property 'DataProvider.UpdatePortalSetting(int, string, string, int, string)'

为 DNN 7.3 及更高版本更新门户设置的最新方法是什么。我可以获取门户设置,只是无法更新它们。

提前致谢。

给你...

using DotNetNuke.Entities.Portals;

//get the current portal settings
PortalInfo portalInfo = PortalController.Instance.GetPortal(PortalId);

//overwrite a specific setting
portalInfo.PortalName = "My New Portal Name";

//save the new portal settings
PortalController portalController = new PortalController();
portalController.UpdatePortalInfo(portalInfo);

您可能需要清除缓存才能使新设置生效。

DotNetNuke.Common.Utilities.DataCache.ClearPortalCache(PortalId, false);

下面是我的解决方法

请注意,此答案适用于 "custom" 门户设置。所以 VDWWD 的解决方案适用于门户对象的所有现有门户设置。

我通过将 .Instance() 添加到以下行来修复此问题:

 DataProvider.UpdatePortalSetting( this.PortalId, "bulletin_sendemail_from", this.tx_emailfrom.Text, UserId, "en-US");

改为

 DataProvider.Instance().UpdatePortalSetting( this.PortalId, "bulletin_sendemail_from", this.tx_emailfrom.Text, UserId, "en-US");

现在可以使用了