0

「AccessFolder」というカスタム コンテンツ タイプを作成しました。コンテンツ タイプのリストに表示され、新しいタイプを作成できます。新しい AccessFolder を作成すると、そのために作成したエディター テンプレートが取得されます。情報を入力して [保存] をクリックすると、Not Foundページが表示されますが、AccessFolder が正常に作成されたことを示すインジケーター メッセージが表示されます。

ドライバーでは、updater.TryUpdateModel. モデルのプロパティに正しい値が割り当てられます。

データベースに到達することはありません。

AccessFolderPart:

public class AccessFolderPart : ContentPart<AccessFolderPartRecord>
{
    public virtual string Name
    {
        get { return Record.Name; }
        set { Record.Name = value; }
    }

    public virtual IEnumerable<RoleRecord> DownloadRoles
    {
        get { return Record.DownloadRoles.Select(x => x.RoleRecord); }
    }
}

AccessFolderPartRecord

public class AccessFolderPartRecord : ContentPartRecord
{
    public virtual string Name { get; set; }
    public virtual List<ContentAccessFolderRoleRecord> DownloadRoles { get; set; }
}

AccessFolderPartDriver の関連部分

    protected override DriverResult Editor(AccessFolderPart part, dynamic shapeHelper)
    {
        var viewModel = new AccessFolderViewModel(part, _roleService.GetRoles());
        return ContentShape("Parts_AccessFolder_Edit", () =>
            shapeHelper.EditorTemplate(TemplateName: templateName, Model: viewModel, Prefix: Prefix));
    }

    protected override DriverResult Editor(AccessFolderPart part, Orchard.ContentManagement.IUpdateModel updater, dynamic shapeHelper)
    {

        var viewModel = new AccessFolderViewModel { Part = part };
        updater.TryUpdateModel(viewModel, Prefix, null, null);

        if (part.ContentItem.Id != 0)
        {
            _roleService.UpdateRolesForAccessFolder(part.ContentItem, part.DownloadRoles);
        }

        return Editor(part, shapeHelper);

    }

私は金曜日からこれにこだわっています。以前にカスタム タイプを作成したことがありますが、問題はありませんでした。ここで何が間違っていたのかわかりません。

更新- コンテンツ Handler クラスを追加

ハンドラーの 1 行を次に示します。

public class AccessFolderPartHandler : ContentHandler
{
    public AccessFolderPartHandler(IRepository<AccessFolderPartRecord> repository)
    {
        Filters.Add(StorageFilter.For(repository));
    }
}
4

1 に答える 1

0

ドライバーに適切なマッピングが欠けていると思います:

    if (updater.TryUpdateModel(viewModel, Prefix, null, null))
            {
               part.Name= viewModel.Name;

               if (part.ContentItem.Id != 0)
               {
                   _roleService.UpdateRolesForAccessFolder(part.ContentItem, part.DownloadRoles);
               }
            }
于 2015-09-15T17:20:06.953 に答える