2016-04-13 11 views
1

Ich habe gerade begonnen Umbraco zu lernen, ich habe ein kleines Projekt gestartet, um Umbraco zu lernen. Ich habe Probleme beim Erstellen eines benutzerdefinierten Controllers. Ich habe einen Link auf meiner Seite für Benutzer alle Produkte durchsuchen:Custom Controller Umbraco

@Html.ActionLink("View more", "Index", "Product", null, new { title = "Browse all Products" }) 

-Controller

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using Umbraco.Web.Models; 
using Umbraco.Web.Mvc; 

namespace Test.Controllers 
{ 
    public class ProductController : Umbraco.Web.Mvc.RenderMvcController 
    { 
     public override ActionResult Index(RenderModel model) 
     { 
      return View("Products"); 
     } 
    } 
} 

die Webseite zeigen einen Link mit leeren href

<a href="" title="Browse all Products">View more</a> 
Aus irgendeinem Grund
+0

Nach [diesem Beitrag] (http://stackoverflow.com/questions/33035660/actionlink-generate -empty-href) muss Ihr Controller von ** Umbraco.Web.Mvc.SurfaceController ** erben, damit die Route abgeholt werden kann. Ist das eine Option für dich? –

+0

Hallo, Ich habe es von SurfaceController erben geändert. Aber jetzt, wenn ich versuche zu laufen bekomme ich Fehler HTTP 404 die resouce nicht gefunden bei/umbraco/Oberfläche wo alle meine Ansichten im Ordner Ansicht gespeichert sind. Ich bin mir nicht sicher, wie ich es ändern kann, um im View-Ordner nach Ansichten zu suchen. – Fahad

Antwort

0

Sie müssen nicht notwendigerweise von SurfaceController erben, da sie normalerweise zum Rendern von MVC Child-Aktionen und zum Behandeln von verwendet werden m Datenübermittlungen. In Ihrem Fall sollte ein Controller, der von Umbraco.Web.Mvc.RenderMvcController erbt, ausreichen.

Überprüfen Sie zunächst den Abschnitt "Einstellungen" von Umbraco und vergewissern Sie sich, dass ein Dokumenttyp namens Product vorhanden ist. Umbraco folgt dieser Konvention für das Routing, so dass alle Seiten des Typs Product an Ihre ProductController weitergeleitet werden. Diese Routingkonvention kann auch dazu beitragen, dass die HtmlHelper die Aktionsverknüpfung korrekt erstellt.

Nach dem documentation arbeitet die Zuordnung wie folgt:

  • Document Type name = Controller Name
  • Template name = Aktionsname
  • , wenn keine Aktion übereinstimmt oder nicht angegeben ist dann der ‚Index 'Aktion wird ausgeführt.

Stellen Sie abschließend sicher, dass Ihre Controller-Aktion die Vorlagenansicht zurückgibt. Wenn beispielsweise die Standard-RenderModel Typ verwenden, können Sie einfach die Vorlage Ansicht für den Dokumenttyp zurück:

public override ActionResult Index(RenderModel model) 
{ 
    return base.Index(model); 
} 
+0

Hallo, Ich habe yous Anweisungen gefolgt, jetzt bekomme ich Fehler: System.Exception: Keine physische Vorlagendatei wurde für die Vorlage gefunden Produkt Ich habe im Backoffice Umbraco überprüft und ich sehe nichts damit wromg. – Fahad

+0

Haben Sie Dokumenttyp eine Vorlage mit dem Namen "Produkt"? Können Sie auch eine Datei namens "Product.cshtml" im Ordner "Views" Ihres Projekts sehen? – elolos