2012-03-31 16 views
0

Ich habe ein benutzerdefiniertes Modul für Orchard nach this wonderful guide erstellt.Orchard Custom Modul zeigt leere "Create" Seite

Ich habe einen Controller namens BarberAdminController wie folgt erstellt:

[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); 
    } 
} 

Ausblick:

@{ 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) 
} 

Auf den Link aus dem Admin-Menü klicken einen Barber zu erstellen, erhalte ich eine leere Seite mit nichts aber eine Schaltfläche "Speichern". (URL:/Admin/BarberShop/Barber/Create)

Weiß jemand, was ich falsch machen könnte?

Ich habe die Routen und Admin-Links eingerichtet und sie scheinen gut zu funktionieren. Ich folgte der Anleitung so genau wie möglich, um die Treiber und Handler für BarberPart korrekt zu erstellen. Einbeziehen in das Dateidatenbankschema von Migration.cs.

Jede Hilfe wäre großartig!

+0

Fehlende Platzierung? –

Antwort

0

Ich fand es heraus.

Ich musste einen Inhaltsteil und Inhaltstyp für BarberPart definieren. In Migrations.cs, tun:

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

Bei dem Verfahren des Controllers "Create", ersetzen:

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

mit:

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

Stellen Sie sicher, dass Sie ein Treiber haben/BarberDriver.cs Datei als solche:

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); 
    } 
} 

Be sicher, dass ein Teil bearbeiten Vorlage in /Views/EditorTemplates/Parts/Barber.cshtml gelegen haben, die wie folgt aussieht: vielleicht

@model SDKU.Barbr.Models.BarberPart 

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