2010-06-22 6 views
4

J'ai 2 questions.Comment obtenir le nom du contrôleur et les données disponibles dans un contrôleur de base?

En premier lieu, fond:

J'ai un PageController : Controller et SearchController : PageController

PageController est défini comme:

public class PageController : Controller 
{ 
    protected ISite Site; 
    protected PageConfiguration PageConfiguration; 

    protected override void Initialize(RequestContext rc) 
    { 
     this.Site = new Site(SessionUser.Instance().SiteId); 

     this.PageConfiguration = this.Site.CurrentSite.GetPage(/* controller name */); 

     base.Initialize(rc); 
    } 
} 

J'ai site & PageConfiguration stocké dans PageController parce que chaque page qui implémente besoins PageController les

Question 1:
J'essaye de porter ceci à partir d'une application existante d'ASP.NET. cela nécessite un nom de page pour obtenir l'objet PageConfiguration. Au lieu d'un nom de page, je vais utiliser le nom du contrôleur à la place. Quelle est la meilleure façon pour moi d'obtenir cela comme une chaîne?

Question 2:
J'essaie de rendre une PartialView qui repose sur ces données, comme suit:

<%@ Page Title="" 
    Language="C#" 
    MasterPageFile="~/Views/Shared/Site.Master" 
    Inherits="System.Web.Mvc.ViewPage<PageConfiguration>" %> 
<%@ Import Namespace="tstFactsheetGenerator.Models.Panels"%> 

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

    <% Html.RenderPartial("Search", new Search { PanelConfiguration = Model.Panels[0] }); %> 
</asp:Content> 

Je peux voir que lorsque la méthode RenderPartial() est appelée le modèle PageConfiguration a le Panel dont j'ai besoin. Mais dans le constructeur de la classe Search, PanelConfiguration est null.

Y a-t-il un meilleur & meilleur moyen de rendre les données dont j'ai besoin pour la page disponible? Merci.

+0

Pouvez-vous montrer comment vous définissez Panel? –

+0

Le panneau est défini lorsque l'objet PageConfiguration est créé. – DaveDev

Répondre

6

Question 1:

protected override void Initialize(RequestContext rc) 
{ 
    ... 
    var controllerName = requestContext.RouteData.Values["controller"] 
    ... 
} 

Question 2:

Comme vous utilisez la classe syntaxe initialiseur (new { PanelConfiguration = ... }) la PanelConfiguration sera nulle dans le constructeur de la classe Search, mais est-il important? Vous ne devriez pas utiliser la propriété PanelConfiguration ici. Dans le Search partiel, il sera initialisé. Si vous avez besoin de l'utiliser dans le constructeur (je ne vois pas pourquoi vous en auriez besoin), vous pouvez l'ajouter comme argument constructeur.

+0

Merci Darin. La raison pour laquelle j'ai besoin d'une instance d'un objet Search est parce que PanelConfiguration est un peu vide de sens dans une vue partielle. J'ai besoin d'utiliser l'information dans PanelConfiguration pour obtenir les données dont la recherche a besoin pour remplir le partiel avec. Pouvez-vous me dire s'il y a une meilleure façon de faire? – DaveDev

Questions connexes