Orchardcms Orchard自定义设置未持久化

Orchardcms Orchard自定义设置未持久化,orchardcms,Orchardcms,这件事让我毛骨悚然;它应该是如此简单,但我无法找出问题所在 我只是想在我的模块中保存一些自定义设置。我以Orchard.Email模块为例介绍了如何插入“设置”菜单;我的代码如下: Migrations.cs 公共类自定义设置迁移:DataMigrationImpl{ 公共int创建(){ CreateTable(“CustomSettingsPartRecord”,table=>table .ContentPartRecord() .列(“网关URL”) .栏(“商品信息”) .栏(“商品密

这件事让我毛骨悚然;它应该是如此简单,但我无法找出问题所在

我只是想在我的模块中保存一些自定义设置。我以Orchard.Email模块为例介绍了如何插入“设置”菜单;我的代码如下:

Migrations.cs

公共类自定义设置迁移:DataMigrationImpl{ 公共int创建(){ CreateTable(“CustomSettingsPartRecord”,table=>table .ContentPartRecord() .列(“网关URL”) .栏(“商品信息”) .栏(“商品密码”) .列(“沙盒模式”) .列(“沙盒网关URL”) .栏(“SandboxMerchantId”) .栏(“沙盒商品密码”) ); 返回1; } } 型号/自定义设置spartRecord.cs

公共类CustomSettingsPartRecord:ContentPartRecord{
公共虚拟字符串网关URL{get;set;}
公共虚拟字符串MerchantId{get;set;}
公共虚拟字符串MerchantPassword{get;set;}
公共虚拟布尔沙盒模式{get;set;}
公共虚拟字符串SandboxGatewayUrl{get;set;}
公共虚拟字符串SandboxMerchantId{get;set;}
公共虚拟字符串SandboxMerchantPassword{get;set;}
公共自定义设置临时记录(){
SandboxMode=true;
}
}
型号/客户设置spart.cs

public类customsetingspart:ContentPart{
私有只读计算字段_password=新计算字段();
公共计算字段PasswordField{
获取{return\u password;}
}
公共字符串网关URL{
获取{return Record.GatewayUrl;}
设置{Record.GatewayUrl=value;}
}
公共字符串商品{
获取{return Record.MerchantId;}
设置{Record.MerchantId=value;}
}
公共字符串密码{
获取{return Record.MerchantPassword;}
设置{Record.MerchantPassword=value;}
}
公共布尔沙箱模式{
获取{return Record.SandboxMode;}
设置{Record.SandboxMode=value;}
}
公共字符串SandboxGatewayUrl{
获取{return Record.SandboxGatewayUrl;}
设置{Record.SandboxGatewayUrl=value;}
}
公共字符串沙盒{
获取{return Record.SandboxMerchantId;}
设置{Record.SandboxMerchantId=value;}
}
公共字符串SandboxMerchantPassword{
获取{return Record.SandboxMerchantPassword;}
设置{Record.SandboxMerchantPassword=value;}
}
公共bool是有效的(){
return((!String.IsNullOrWhiteSpace(Record.GatewayUrl)
&&!String.IsNullOrWhiteSpace(Record.MerchantId))||
(Record.SandboxMode&&!String.IsNullOrWhiteSpace(Record.SandboxGatewayUrl)&&
!String.IsNullOrWhiteSpace(Record.SandboxMerchantId));
}
}
Handlers/CustomSettingsPartHandler.cs

[usedimplicity]
公共类CustomSettingsPartHandler:ContentHandler{
专用只读电子选择服务(U encryptionService);;
公共自定义设置SpartHandler(IRepository存储库、iEntryOptions服务加密服务){
T=NullLocalizer.Instance;
Logger=NullLogger.Instance;
_encryptionService=加密服务;
过滤器。添加(新激活过滤器(“站点”);
Filters.Add(StorageFilter.For(repository));
加载(懒散加载处理程序);
}
公共定位器T{get;set;}
公共新ILogger记录器{get;set;}
void LazyLoadHandlers(LoadContentContext上下文,CustomSettingsPart部分){
part.PasswordField.Getter(()=>{
试一试{
返回String.IsNullOrWhiteSpace(part.Record.MerchantPassword)?String.Empty:Encoding.UTF8.GetString(_encryptionService.Decode(Convert.FromBase64String(part.Record.MerchantPassword));
}
捕获(例外){
Logger.Error(“无法解密商户密码。它可能已损坏,请尝试重置它。”);
返回null;
}
});
part.PasswordField.Setter(value=>part.Record.merchanttpassword=String.IsNullOrWhiteSpace(value)?String.Empty:Convert.ToBase64String(_encryptionService.Encode(Encoding.UTF8.GetBytes(value));
}
受保护的覆盖无效GetItemMetadata(GetContentItemMetadataContext上下文){
if(context.ContentItem.ContentType!=“站点”)
返回;
base.GetItemMetadata(上下文);
context.Metadata.EditorGroupInfo.Add(新的GroupInfo(T(“自定义”));
}
}
Drivers/CustomSettingsPartDriver.cs

公共类CustomSettingsPartDriver:ContentPartDriver{
private const string TemplateName=“Parts/CustomSettings”;
公共客户设置SpartDriver(){
T=NullLocalizer.Instance;
}
公共定位器T{get;set;}
受保护的重写字符串前缀{get{return“CustomSettings”;}
受保护的替代驱动器结果编辑器(自定义设置备用零件,动态形状帮助器){
返回ContentShape(“零件\自定义设置\编辑”,
()=>shapeHelper.EditorTemplate(TemplateName:TemplateName,Model:part,Prefix:Prefix))
.OnGroup(“海关”);
}
受保护的重写驱动程序结果编辑器(CustomSettingsPart部件、IUpdateModel更新程序、动态形状帮助程序){
返回ContentShape(“零件\自定义设置\编辑”,()=>{
var previousPassword=part.merchanttpassword;
TryUpdateModel(部分,前缀,null,null);
//如果输入为空,则恢复密码,这意味着密码尚未更改
if(String.IsNullOrEmpty(part.MerchantPassword)){
part.MerchantPassword=以前的密码;
}
返回shapeHelper.EditorTemplate(临时