我正在使用Christoc模板在Visual Studio 2012中构建自定义DNN 7模块。我已经能够弄清楚如何设置模块范围设置,以及选项卡范围设置。但是,我想要做的是在扩展/包级别或至少在门户级别设置一些默认设置。这样,如果用户正在添加模块实例,则会有我可以读入的默认值以供使用。两个问题:
1)我当然可以编写一个名为ExtensionSettings.ascx的控件(ASCX),它可能会起作用(至少对于Portal作用域),但是如何在DNN清单文件中指定这将被添加到正确的设置中页面(推测在Host | Extensions | MyModule | Edit下?)
2)如何在安装时预先填充这些设置?我是否需要添加一个SQL语句来手动添加它们,还是有办法通过清单添加设置?
答案 0 :(得分:0)
创建设置界面:
public interface ISettingsRepository
{
string ReplyToAddress { get; set; }
string InviteEmailSubject { get; set; }
}
然后是一个实现类(注意默认值是getter中返回的默认值)。请参阅将属性值写为模块设置的完整实现。
public class SettingsRepository : ISettingsRepository
{
/*
* See the full code at
* https://dnnsocialinvite.codeplex.com/SourceControl/latest#Components/SettingsRepository.cs
*/
...
public string ReplyToAddress
{
get { return ReadSetting<string>("ReplyToAddress", "noreply@email.com"); }
set { WriteSetting("ReplyToAddress", value.ToString()); }
}
public string InviteEmailSubject
{
get { return ReadSetting<string>("InviteEmailSubject", "You are invited to join"); }
set { WriteSetting("InviteEmailSubject", value.ToString()); }
}
}
然后您可以在模块的设置控件中使用它。请注意,我可以将设置作为属性来引用以设置和获取它们。如果我收到的设置尚未设置,则会返回默认值:
public override void LoadSettings()
{
SettingsRepository _settingsCtrl = SettingsRepository(this.ModuleId, this.TabModuleId);
txtEmailSubject.Text = _settingsCtrl.InviteEmailSubject;
}
public override void UpdateSettings()
{
SettingsRepository _settingsCtrl = SettingsRepository(this.ModuleId, this.TabModuleId);
_settingsCtrl.InviteEmailSubject = txtEmailSubject.Text;
}
现在,此实现具有扩展名的硬编码默认值。您可以从资源(.resx)文件中读取默认设置字符串,并可以使用资源文件名中的门户网站ID维护每个门户网站的资源文件。该值可以替换设置属性的getter中的硬编码默认值。