2010-12-08 9 views
5

Ich habe einen Bereich erstellt, der mit unseren generischen Dingen in all unseren Entwicklungsprodukten umgehen wird, ebenso wie Login-Ins, HTML-Helfer usw. Innerhalb des Bereichs habe ich eine Teilansicht, die ich versuche, außerhalb des Bereichs zu referenzieren. Ich habe den Bereich mitAsp.net MVC - Rendern einer Teilansicht von einem Bereich

registriert
public class Routes : AreaRegistration 
{ 
    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Common_default", 
      "Common/{controller}/{action}/{id}", 
      new { 
       controller = "Account", 
       action = "Index", 
       id = UrlParameter.Optional 
      }); 
    } 

    public override string AreaName 
    { 
     get { return "MvcCommons"; } 
    } 
} 

Und jetzt in dem regulären Projekt, ich versuche, eine Ansicht in MvcCommons Bereich zu verweisen ...

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> 

<h2>TestGrid</h2> 

<% Html.RenderPartial("jQGridTable", ViewData.Model); %> 

Aber ich Sie daran, dass die Ansicht bekommen wird nicht gefunden. Vorher habe ich beim Erstellen des MVC Commons-Projekts Fehler bekommen, aber die Fehler haben mir gezeigt, dass es sowohl in den Bereichsordnern als auch in den Standardansichtsordnern gesucht hat. Diesmal erhalte ich nur die Standardordner. Gibt es einen Weg, dies zu erreichen?

Danke allen!

Antwort

5

Ich habe das eigentlich nicht tun müssen, aber bei einer Schätzung würde ich annehmen, dass Sie stattdessen Html.RenderAction() verwenden sollten, etwas wie Html.RenderAction("action", "controller", new { area = "Area", model = ViewData.Model }).

Modell muss durch den Namen der Aktion Parameter ersetzt werden, aber das sollte funktionieren.

bearbeiten Dies erfordert jedoch eine Steuerung und Ansicht Setup für jede Aktion.

0

Die Standard-ViewEngine sucht nach den Ansichten in denselben Bereichs- (oder Stamm-) Ordnern, auf die das Benutzersteuerelement verweist. Wenn Sie eine benutzerdefinierte Methode zum Verwenden oder Speichern von Ansichten erstellen möchten, sollten Sie eine benutzerdefinierte ViewEngine erstellen. Bitte sehen Sie sich dieses Beispiel an: Implement Theme Folders using a Custom ViewEngine

0

Eine wichtige Sache zu erinnern ist, dass wenn Sie RenderPartial verwenden Sie es im Kontext der aktuellen Aktion verwenden.

Da Ihre Aktion nicht in einem Bereich ist, wird nur im View/Ordner nach dem Controller gesucht, zu dem die Aktion gehört, dann zum freigegebenen Ordner.

Alle Ansichten, die Sie für Bereiche und Controller freigeben möchten und die auf der Route verfügbar sind, sollten der Stammordner View/Shared sein. Wirklich, wenn die Ansicht als partiell so abrufbar ist, gibt es wahrscheinlich wenig Grund dafür, dass sie zu einem Gebiet gehört.

Sie können einen Bereich aufrufen, wenn Sie Aktionen statt Teiltöne darstellen möchten. Dadurch wird der Kontext der aktuellen Aktion in die aufgerufene Aktion geändert, sodass Sie Ansichten innerhalb dieses Bereichs zurückgeben können.

Verwandte Themen