Orchard自定义用户部件未存储在数据库中

时间:2012-07-01 01:19:12

标签: orchardcms

我似乎无法在附加到User的单独内容部分中存储其他数据。我做了以下事情:

  • 创建了一个模块
  • 在模块中,我为ProfilePart和ProfilePartRecord创建了一个Model
  • 在迁移中,我为ProfilePartRecord创建了一个表(来自ContentPartRecord类型)
  • 在迁移中,我通过设置WithPart ProfilePart
  • 更改了User的typedefinition
  • 我创建了一个驱动程序类,它有2个编辑方法,一个用于get,一个用于post(代码片段在下面
  • 我还创建了一个处理程序,为ProfilePartRecord类型的profilePartRepository添加存储过滤器

模块结构

  • 驱动器/ ProfilePartDriver.cs
  • 处理程序/ ProfileHandler.cs
  • Models / ProfilePart.cs
  • 模型/ ProfilePartRecord.cs
  • Views / EditorTemplates / Parts / profile.cshtml
  • Migrations.cs
  • Placement.info

因为我认为问题出在驱动程序中。这是我的代码:

是否出错,因为该部件已附加到用户?或者我错过了其他的东西。

public class ProfilePartDriver:ContentPartDriver {

protected override string Prefix
{
    get { return "Profile"; }
}

//GET
protected override DriverResult Editor(ProfilePart part, dynamic shapeHelper)
{
    return ContentShape("Parts_Profile_Edit", () => 
                    shapeHelper.EditorTemplate(TemplateName: "Parts/Profile", Model: part, Prefix: Prefix));
}

//POST
protected override DriverResult Editor(ProfilePart part, IUpdateModel updater, dynamic shapeHelper)
{
    updater.TryUpdateModel(part, Prefix, null, null);
    return Editor(part, shapeHelper);
}

}

2 个答案:

答案 0 :(得分:2)

我使用过Skywalker's blog。有一章关于使用用户注册客户并向其添加自己的内容部分。为我工作很好。

答案 1 :(得分:0)

首先 - 当您转到信息中心并编辑给定用户时,您的ProfilePart编辑器是否显示?我注意到您使用Parts_Profile_Edit作为形状键,但实际上使用EditorTemplates/Parts/Profile.cshtml作为模板。这是完全正确的,但请注意,Placement.info文件使用形状键,因此您必须使用Parts_Profile_Edit作为形状名称。否则它将无法显示。

第二次 - 您是否尝试过调试以查看是否正在调用第二个驱动程序Editor方法(处理POST的方法)?

像Bertrand建议的那样,我会研究一个现有的模块(在图库中有一个用户配置文件)并看到差异。它可能是一些小的东西,例如。一个错字。