Пользовательский модуль Orchard с пустой страницей «Создать» - PullRequest
0 голосов
/ 31 марта 2012

Я создал собственный модуль для Orchard, следуя этому замечательному руководству .

Я создал контроллер с именем BarberAdminController следующим образом:

[Admin]
public class BarberAdminController : Controller
{
    ...

    public BarberAdminController(IOrchardServices services, IRepository<BarberPart> repository)
    {
        _repository = repository;
        _services = services;
    }

    ... 

    public ActionResult Create()
    {
        var barber = _services.ContentManager.New(typeof(BarberPart).ToString());

        dynamic model = _services.ContentManager.BuildEditor(barber);

        return View(model);
    } 
}

Представление:

@{ Layout.Title = T("New Barber").ToString(); }

@using (Html.BeginFormAntiForgeryPost()) {
    @Html.ValidationSummary()
    // Model is a Shape, calling Display() so that it is rendered using the most specific template for its Shape type
    @Display(Model)
}

После нажатия на ссылку в меню администратора, чтобы создать цирюльника, я получаю пустую страницу, на которой нет ничего, кроме кнопки «Сохранить».(URL: / Admin / BarberShop / Barbers / Create)

Кто-нибудь знает, что я могу делать неправильно?

Я настроил маршруты и ссылки администратора, и они, кажется, работают нормально,Я тщательно следовал руководству по правильному созданию драйверов и обработчиков для BarberPart.В том числе вплоть до схемы базы данных файла Migration.cs.

Любая помощь будет отличной!

1 Ответ

0 голосов
/ 02 апреля 2012

Я понял это.

Мне нужно было определить часть содержимого и тип содержимого для BarberPart. В Migrations.cs выполните:

ContentDefinitionManager.AlterPartDefinition(typeof(BarberPart).Name, p => p
            .Attachable(false));
ContentDefinitionManager.AlterTypeDefinition("Barber", t => t
            .WithPart(typeof(BarberPart).Name));

В методе «Создать» контроллера, замените:

var barber = _services.ContentManager.New(typeof(BarberPart).ToString());

с:

BarberPart barber = _services.ContentManager.New<BarberPart>("Barber");

Убедитесь, что у вас есть файл Drivers / BarberDriver.cs как таковой:

public class BarberDriver : ContentPartDriver<BarberPart> 
{
    protected override DriverResult Editor(BarberPart part, dynamic shapeHelper)
    {
        return ContentShape("Parts_Barber_Edit", () => shapeHelper.EditorTemplate(TemplateName: "Parts/Barber", Model: part, Prefix: Prefix));
    }

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

Убедитесь, что шаблон редактирования детали находится в /Views/EditorTemplates/Parts/Barber.cshtml и выглядит так:

@model SDKU.Barbr.Models.BarberPart

<fieldset>
    @Html.EditorFor(model => model.SomePropertyName)
    etc...
</fieldset>
...